Пример #1
0
static int _set_rec(int *start, int argc, char *argv[],
                    List acct_list,
                    List cluster_list,
                    slurmdb_account_rec_t *acct,
                    slurmdb_association_rec_t *assoc)
{
    int i;
    int u_set = 0;
    int a_set = 0;
    int end = 0;
    int command_len = 0;
    int option = 0;

    for (i=(*start); i<argc; i++) {
        end = parse_option_end(argv[i]);
        if (!end)
            command_len=strlen(argv[i]);
        else {
            command_len=end-1;
            if (argv[i][end] == '=') {
                option = (int)argv[i][end-1];
                end++;
            }
        }

        if (!strncasecmp(argv[i], "Where", MAX(command_len, 5))) {
            i--;
            break;
        } else if (!end && !strncasecmp(argv[i], "set",
                                        MAX(command_len, 3))) {
            continue;
        } else if (!end
                   || !strncasecmp(argv[i], "Accounts",
                                   MAX(command_len, 1))
                   || !strncasecmp(argv[i], "Names",
                                   MAX(command_len, 1))
                   || !strncasecmp(argv[i], "Acct",
                                   MAX(command_len, 4))) {
            if (acct_list)
                slurm_addto_char_list(acct_list, argv[i]+end);
            else {
                exit_code=1;
                fprintf(stderr,
                        " Can't modify the name "
                        "of an account\n");
            }
        } else if (!strncasecmp(argv[i], "Clusters",
                                MAX(command_len, 1))) {
            if (cluster_list)
                slurm_addto_char_list(cluster_list,
                                      argv[i]+end);
            else {
                exit_code=1;
                fprintf(stderr,
                        " Can't modify the cluster "
                        "of an account\n");
            }
        } else if (!strncasecmp(argv[i], "Description",
                                MAX(command_len, 1))) {
            acct->description =  strip_quotes(argv[i]+end, NULL, 1);
            u_set = 1;
        } else if (!strncasecmp(argv[i], "Organization",
                                MAX(command_len, 1))) {
            acct->organization = strip_quotes(argv[i]+end, NULL, 1);
            u_set = 1;
        } else if (!strncasecmp (argv[i], "RawUsage",
                                 MAX(command_len, 7))) {
            uint32_t usage;
            if (!assoc)
                continue;
            assoc->usage = xmalloc(sizeof(
                                       assoc_mgr_association_usage_t));
            if (get_uint(argv[i]+end, &usage,
                         "RawUsage") == SLURM_SUCCESS) {
                assoc->usage->usage_raw = usage;
                a_set = 1;
            }
        } else if (!assoc ||
                   (assoc && !(a_set = sacctmgr_set_association_rec(
                                           assoc, argv[i], argv[i]+end,
                                           command_len, option)))) {
            exit_code=1;
            fprintf(stderr, " Unknown option: %s\n"
                    " Use keyword 'where' to modify condition\n",
                    argv[i]);
        }
    }

    (*start) = i;

    if (u_set && a_set)
        return 3;
    else if (a_set)
        return 2;
    else if (u_set)
        return 1;

    return 0;
}
Пример #2
0
static int _set_rec(int *start, int argc, char *argv[],
		    List name_list,
		    slurmdb_association_rec_t *assoc,
		    uint16_t *classification)
{
	int i;
	int set = 0;
	int end = 0;
	int command_len = 0;
	int option = 0;

	for (i=(*start); i<argc; i++) {
		end = parse_option_end(argv[i]);
		if(!end)
			command_len=strlen(argv[i]);
		else {
			command_len=end-1;
			if(argv[i][end] == '=') {
				option = (int)argv[i][end-1];
				end++;
			}
		}

		if (!strncasecmp(argv[i], "Where", MAX(command_len, 5))) {
			i--;
			break;
		} else if(!end && !strncasecmp(argv[i], "set",
					       MAX(command_len, 3))) {
			continue;
		} else if(!end
			  || !strncasecmp(argv[i], "Names",
					   MAX(command_len, 1))
			  || !strncasecmp(argv[i], "Clusters",
					   MAX(command_len, 3))) {
			if(name_list)
				slurm_addto_char_list(name_list,
						      argv[i]+end);
		} else if (!strncasecmp(argv[i], "Classification",
					 MAX(command_len, 3))) {
			if(classification) {
				*classification =
					str_2_classification(argv[i]+end);
				if(*classification)
					set = 1;
			}
		} else if (!strncasecmp(argv[i], "GrpCPUMins",
					 MAX(command_len, 7))) {
			exit_code=1;
			fprintf(stderr, "GrpCPUMins is not a valid option "
				"for the root association of a cluster.\n");
			break;
		} else if (!strncasecmp(argv[i], "GrpWall",
					 MAX(command_len, 4))) {
			exit_code=1;
			fprintf(stderr, "GrpWall is not a valid option "
				"for the root association of a cluster.\n");
		} else if(!assoc ||
			  (assoc && !(set = sacctmgr_set_association_rec(
					      assoc, argv[i], argv[i]+end,
					      command_len, option)))) {
			exit_code=1;
			fprintf(stderr, " Unknown option: %s\n"
				" Use keyword 'where' to modify condition\n",
				argv[i]);
		}
	}
	(*start) = i;

	return set;

}