X-Git-Url: http://git.ipfire.org/?p=nitsi.git;a=blobdiff_plain;f=src%2Fnitsi%2Frecipe.py;h=e1e2af8904a4edb721ca01c942b0cef623a6a9e0;hp=56f1e755e63161a941f93626ca428679b6d42710;hb=c9c4a606d012438f0635b4058c1715a5a68f876d;hpb=6632e137d51fe3e45e87474eb2f932620a9b5565 diff --git a/src/nitsi/recipe.py b/src/nitsi/recipe.py index 56f1e75..e1e2af8 100644 --- a/src/nitsi/recipe.py +++ b/src/nitsi/recipe.py @@ -15,20 +15,23 @@ class RecipeExeption(Exception): # Should read the test, check if the syntax are valid # and return tuples with the ( host, command ) structure -class recipe(): - def __init__(self, path, circle=[]): +class Recipe(): + def __init__(self, path, circle=[], machines=[]): self.recipe_file = path try: self.path = os.path.dirname(self.recipe_file) + self.path = os.path.abspath(self.path) self.name = os.path.basename(self.path) except BaseException as e: - logger.error("Failed to get the name of the test to this recipe") + logger.error("Failed to get the path to this recipe") raise e self.log = logger.getChild(self.name) self.log.debug("Path of recipe is: {}".format(self.recipe_file)) self._recipe = None - self._machines = None + self._machines = machines + + self.log.debug("Machine names we use when we substitute the all statement: {}".format(self._machines)) self.in_recursion = True if len(circle) == 0: @@ -39,13 +42,13 @@ class recipe(): if not os.path.isfile(self.recipe_file): self.log.error("{} is not a file".format(self.recipe_file)) - raise RecipeExeption("{} is not a file".format(self.recipe_file)()) + raise RecipeExeption("{} is not a file".format(self.recipe_file)) try: with open(self.recipe_file) as fobj: self.raw_recipe = fobj.readlines() except FileNotFoundError as error: - self.log.error("No such file: {}".format(vm_xml_file)) + self.log.error("No such file: {}".format(self.recipe_file)) raise error @property @@ -57,18 +60,24 @@ class recipe(): @property def machines(self): - if not self._machines: - self._machines = [] - for line in self._recipe: - if line[0] != "all" and line[0] not in self._machines: - self._machines.append(line[0]) - return self._machines def parse(self): self._recipe = [] i = 1 for line in self.raw_recipe: + # Check if the line is empty + if line.strip() == "": + self.log.debug("Skipping empty line {}".format(i)) + i = i + 1 + continue + + # Check if the line is a comment + if line.strip().startswith("#"): + self.log.debug("Skipping comment in line {}".format(i)) + i = i + 1 + continue + raw_line = line.split(":", 1) if len(raw_line) < 2: self.log.error("Error parsing the recipe in line {}".format(i)) @@ -94,12 +103,16 @@ class recipe(): if machine == "include": path = cmd.strip() path = os.path.normpath(self.path + "/" + path) - path = path + "/recipe" + + # If we did not get a valid file we asume that we get a valid path to a test. + if os.path.isdir(path): + path = path + "/recipe" + if path in self.circle: self.log.error("Detect import loop!") raise RecipeExeption("Detect import loop!") self.circle.append(path) - recipe_to_include = recipe(path, circle=self.circle) + recipe_to_include = Recipe(path, circle=self.circle) if machine == "include": self._recipe.extend(recipe_to_include.recipe)