daemon/gui/grpc: added support to retrieve rendered config service files, added support for grpc to access this, and update gui to leverage this call to provide a rendered view of files based on the current scenario, also allows editing the rendered output to use as the input when running the scenario

This commit is contained in:
Blake Harnden 2022-04-08 22:24:07 -07:00
parent 443c0e708f
commit bd6f789cef
8 changed files with 171 additions and 46 deletions

View file

@ -331,6 +331,33 @@ class ConfigService(abc.ABC):
templates[file] = template
return templates
def get_rendered_templates(self) -> Dict[str, str]:
templates = {}
data = self.data()
for file in sorted(self.files):
rendered = self._get_rendered_template(file, data)
templates[file] = rendered
return templates
def _get_rendered_template(self, file: str, data: Dict[str, Any]) -> str:
file_path = Path(file)
template_path = get_template_path(file_path)
if file in self.custom_templates:
text = self.custom_templates[file]
rendered = self.render_text(text, data)
elif self.templates.has_template(template_path):
rendered = self.render_template(template_path, data)
else:
try:
text = self.get_text_template(file)
except Exception as e:
raise ConfigServiceTemplateError(
f"node({self.node.name}) service({self.name}) file({file}) "
f"failure getting template: {e}"
)
rendered = self.render_text(text, data)
return rendered
def create_files(self) -> None:
"""
Creates service files inside associated node.
@ -342,22 +369,24 @@ class ConfigService(abc.ABC):
logger.debug(
"node(%s) service(%s) template(%s)", self.node.name, self.name, file
)
rendered = self._get_rendered_template(file, data)
# file_path = Path(file)
# template_path = get_template_path(file_path)
# if file in self.custom_templates:
# text = self.custom_templates[file]
# rendered = self.render_text(text, data)
# elif self.templates.has_template(template_path):
# rendered = self.render_template(template_path, data)
# else:
# try:
# text = self.get_text_template(file)
# except Exception as e:
# raise ConfigServiceTemplateError(
# f"node({self.node.name}) service({self.name}) file({file}) "
# f"failure getting template: {e}"
# )
# rendered = self.render_text(text, data)
file_path = Path(file)
template_path = get_template_path(file_path)
if file in self.custom_templates:
text = self.custom_templates[file]
rendered = self.render_text(text, data)
elif self.templates.has_template(template_path):
rendered = self.render_template(template_path, data)
else:
try:
text = self.get_text_template(file)
except Exception as e:
raise ConfigServiceTemplateError(
f"node({self.node.name}) service({self.name}) file({file}) "
f"failure getting template: {e}"
)
rendered = self.render_text(text, data)
self.node.create_file(file_path, rendered)
def run_startup(self, wait: bool) -> None: