Source code for pi_portal.installation.actions.action_render_templates

"""RenderTemplatesAction class."""

import dataclasses
from typing import Any, Dict, List

from pi_portal.installation.templates import config_file
from pi_portal.modules.system import file_system
from .bases import base_action


[docs]@dataclasses.dataclass class FileSystemTemplate: """Represents a config template on the file system. :param source: A boolean indicating a folder should be created. :param destination: The local path that should be created path. :param permissions: The file permissions to set on the created path. :param user: The linux user to set as the owner of the created path. :param group: The linux user to set as the group of the created path. :param context: Optional additional context you wish to pass to the template. """ source: str destination: str permissions: str group: str user: str context: Dict[str, Any] = dataclasses.field(default_factory=lambda: {})
[docs]class RenderTemplatesAction(base_action.ActionBase): """Render and secure the configured templates.""" templates: List[FileSystemTemplate]
[docs] def invoke(self) -> None: """Render and secure the configured templates.""" for template in self.templates: self.log.info( "Template: '%s' -> '%s' ...", template.source, template.destination, ) config_file_template = config_file.ConfileFileTemplate( source=template.source, destination=template.destination, ) config_file_template.context.update(template.context) config_file_template.render() fs = file_system.FileSystem(template.destination) fs.ownership(template.user, template.group) fs.permissions(template.permissions) self.log.info( "Template: '%s' -> '%s' completed.", template.source, template.destination, )