diff options
Diffstat (limited to 'lib/check_used_options.py')
-rw-r--r-- | lib/check_used_options.py | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/lib/check_used_options.py b/lib/check_used_options.py new file mode 100644 index 0000000..ad4a387 --- /dev/null +++ b/lib/check_used_options.py @@ -0,0 +1,68 @@ +## Check if fence agent uses only options["--??"] which are defined in fencing library or +## fence agent itself +## +## Usage: ./check_used_options.py fence-agent (e.g. lpar/fence_lpar.py) +## + +import sys, re +sys.path.append("@FENCEAGENTSLIBDIR@") +from fencing import all_opt + +def main(): + agent = sys.argv[1] + + available = {} + + ## all_opt from fencing library are imported + for k in list(all_opt.keys()): + if "longopt" in all_opt[k]: + available["--" + all_opt[k]["longopt"]] = True + + ## add UUID which is derived automatically from --plug if possible + available["--uuid"] = True + + ## all_opt defined in fence agent are found + agent_file = open(agent) + opt_re = re.compile(r"\s*all_opt\[\"([^\"]*)\"\] = {") + opt_longopt_re = re.compile(r"\"longopt\"\s*:\s*\"([^\"]*)\"") + + in_opt = False + for line in agent_file: + if opt_re.search(line) != None: + in_opt = True + if in_opt and opt_longopt_re.search(line) != None: + available["--" + opt_longopt_re.search(line).group(1)] = True + in_opt = False + + ## check if all options are defined + agent_file = open(agent) + option_use_re = re.compile(r"options\[\"(-[^\"]*)\"\]") + option_in_re = re.compile(r"\"(-[^\"]*)\" in options") + option_has_re = re.compile(r"options.has_key\(\"(-[^\"]*)\"\)") + + counter = 0 + without_errors = True + for line in agent_file: + counter += 1 + + for option in option_use_re.findall(line): + if option not in available: + print("ERROR on line %d in %s: option %s is not defined" % (counter, agent, option_use_re.search(line).group(1))) + without_errors = False + + for option in option_in_re.findall(line): + if option not in available: + print("ERROR on line %d in %s: option %s is not defined" % (counter, agent, option_has_re.search(line).group(1))) + without_errors = False + + for option in option_has_re.findall(line): + print("ERROR on line %d in %s: option %s: has_key() not supported in Python 3" % (counter, agent, option_has_re.search(line).group(1))) + without_errors = False + + if without_errors: + sys.exit(0) + else: + sys.exit(1) + +if __name__ == "__main__": + main() |