sysctls.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. from typing import TYPE_CHECKING
  2. if TYPE_CHECKING:
  3. from render import Render
  4. from container import Container
  5. try:
  6. from .error import RenderError
  7. from .validations import valid_sysctl_or_raise
  8. except ImportError:
  9. from error import RenderError
  10. from validations import valid_sysctl_or_raise
  11. class Sysctls:
  12. def __init__(self, render_instance: "Render", container_instance: "Container"):
  13. self._render_instance = render_instance
  14. self._container_instance = container_instance
  15. self._sysctls: dict = {}
  16. def add(self, key: str, value):
  17. key = key.strip()
  18. if not key:
  19. raise RenderError("Sysctls key cannot be empty")
  20. if value is None:
  21. raise RenderError(f"Sysctl [{key}] requires a value")
  22. if key in self._sysctls:
  23. raise RenderError(f"Sysctl [{key}] already added")
  24. self._sysctls[key] = str(value)
  25. def has_sysctls(self):
  26. return bool(self._sysctls)
  27. def render(self):
  28. if not self.has_sysctls():
  29. return {}
  30. host_net = self._container_instance._network_mode == "host"
  31. return {valid_sysctl_or_raise(k, host_net): v for k, v in self._sysctls.items()}