From 5945ce2a76fd758e14cd77a71069875c9ae0dac8 Mon Sep 17 00:00:00 2001 From: Jonatan Schlag Date: Sat, 28 Jul 2018 11:49:37 +0200 Subject: [PATCH] Improve substitution of the all: statement We now substitute the all: statement in 3 stages: 1. We check if we get a setting for it which states which machines should substitute all: (The setting is not fully implemented yet but all changes which need to be done in recipe.py are done) 2. We try to get all machines named in the recipe and try to substitute all: with these list. 3. If all other methods faile dwe substitute all: with all amchines named in the virtual environment. Signed-off-by: Jonatan Schlag --- src/nitsi/recipe.py | 53 +++++++++++++++++++++++++++++++++++---------- src/nitsi/test.py | 4 +++- 2 files changed, 45 insertions(+), 12 deletions(-) diff --git a/src/nitsi/recipe.py b/src/nitsi/recipe.py index bb5ec5b..d98bac5 100644 --- a/src/nitsi/recipe.py +++ b/src/nitsi/recipe.py @@ -16,7 +16,7 @@ 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=[], machines=[]): + def __init__(self, path, circle=[], machines=[], fallback_machines=[]): self.recipe_file = path try: self.path = os.path.dirname(self.recipe_file) @@ -126,15 +126,46 @@ class Recipe(): machines = machine.split(",") for machine in machines: self._recipe.append((machine.strip(), extra.strip(), cmd.strip())) - i = i + 1 - if not self.in_recursion: - tmp_recipe = [] - for line in self._recipe: - if line[0] != "all": - tmp_recipe.append(line) - else: - for machine in self.machines: - tmp_recipe.append((machine.strip(), line[1], line[2])) + # Increase the line number by one + i = i + 1 - self._recipe = tmp_recipe \ No newline at end of file + # Substitue the all statement + if not self.in_recursion: + self.log.debug("We are not in a recursion") + # We will store the machine names we use to substitute the all statement + # in tmp_machines to keep the code which actually does the substitution clear + tmp_machines = None + + # Check if we get a setting to substitute the all statement + if len(self.machines) != 0: + tmp_machines = self.machines + + # Second try to fill tmp_machines + if not tmp_machines: + # dertermine machines we use in this recipe + tmp = [] + for line in self.recipe: + self.log.debug(line) + if not line[0] in tmp and line[0] != "all": + tmp.append(line[0]) + + self.log.debug("Machines except all in the recipe: {}".format(tmp)) + + # Check if we got anything else then all: in th recipe + if len(tmp) != 0: + tmp_machines = tmp + + # If we get here we are using all machines in the virtual environment as fallback value + if not tmp_machines: + tmp_machines = self._fallback_machines + + tmp_recipe = [] + for line in self._recipe: + if line[0] != "all": + tmp_recipe.append(line) + else: + for machine in tmp_machines: + tmp_recipe.append((machine.strip(), line[1], line[2])) + + self._recipe = tmp_recipe \ No newline at end of file diff --git a/src/nitsi/test.py b/src/nitsi/test.py index 7d17cec..e3563e1 100755 --- a/src/nitsi/test.py +++ b/src/nitsi/test.py @@ -190,7 +190,9 @@ class Test(): def load_recipe(self): self.log.info("Going to load the recipe") try: - self.recipe = recipe.Recipe(self.recipe_file, machines=self.virtual_environ.machine_names) + self.recipe = recipe.Recipe(self.recipe_file, + fallback_machines=self.virtual_environ.machine_names) + for line in self.recipe.recipe: self.log.debug(line) -- 2.39.2