__init__.py 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. """Kubernetes module with multi-schema support."""
  2. import logging
  3. from collections import OrderedDict
  4. from ...core.module import Module
  5. from ...core.registry import registry
  6. from ...core.schema import has_schema, list_versions, load_schema
  7. logger = logging.getLogger(__name__)
  8. def _load_json_spec_as_dict(version: str) -> OrderedDict:
  9. """Load JSON schema and convert to dict format for backward compatibility.
  10. Args:
  11. version: Schema version
  12. Returns:
  13. OrderedDict in the same format as Python specs
  14. """
  15. logger.debug(f"Loading kubernetes schema {version} from JSON")
  16. json_spec = load_schema("kubernetes", version)
  17. # Convert JSON array format to OrderedDict format
  18. spec_dict = OrderedDict()
  19. for section_data in json_spec:
  20. section_key = section_data["key"]
  21. # Build section dict
  22. section_dict = {}
  23. if "title" in section_data:
  24. section_dict["title"] = section_data["title"]
  25. if "description" in section_data:
  26. section_dict["description"] = section_data["description"]
  27. if "toggle" in section_data:
  28. section_dict["toggle"] = section_data["toggle"]
  29. if "required" in section_data:
  30. section_dict["required"] = section_data["required"]
  31. if "needs" in section_data:
  32. section_dict["needs"] = section_data["needs"]
  33. # Convert vars array to dict
  34. vars_dict = OrderedDict()
  35. for var_data in section_data["vars"]:
  36. var_name = var_data["name"]
  37. var_dict = {k: v for k, v in var_data.items() if k != "name"}
  38. vars_dict[var_name] = var_dict
  39. section_dict["vars"] = vars_dict
  40. spec_dict[section_key] = section_dict
  41. return spec_dict
  42. # Schema version mapping - loads JSON schemas on-demand
  43. class _SchemaDict(dict):
  44. """Dict subclass that loads JSON schemas on-demand."""
  45. def __getitem__(self, version):
  46. if not has_schema("kubernetes", version):
  47. raise KeyError(
  48. f"Schema version {version} not found for kubernetes module. "
  49. f"Available: {', '.join(list_versions('kubernetes'))}"
  50. )
  51. return _load_json_spec_as_dict(version)
  52. def __contains__(self, version):
  53. return has_schema("kubernetes", version)
  54. # Initialize schema dict
  55. SCHEMAS = _SchemaDict()
  56. # Default spec - load latest version
  57. spec = _load_json_spec_as_dict("1.0")
  58. class KubernetesModule(Module):
  59. """Kubernetes module."""
  60. name = "kubernetes"
  61. description = "Manage Kubernetes configurations"
  62. schema_version = "1.0" # Current schema version supported by this module
  63. schemas = SCHEMAS # Available schema versions
  64. registry.register(KubernetesModule)