mirror of
https://github.com/ChristianLempa/boilerplates.git
synced 2026-08-28 10:04:57 -05:00
97 lines
2.9 KiB
Python
97 lines
2.9 KiB
Python
"""Docker Swarm module with compose-compatible validation."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import logging
|
|
from typing import Annotated
|
|
|
|
from typer import Argument, Option
|
|
|
|
from ...core.module import Module
|
|
from ...core.module.base_commands import ValidationConfig, validate_templates
|
|
from ...core.registry import registry
|
|
from ..compose.validate import ComposeDockerValidator
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class SwarmModule(Module):
|
|
"""Docker Swarm module."""
|
|
|
|
name = "swarm"
|
|
description = "Manage Docker Swarm stack templates"
|
|
kind_validator_class = ComposeDockerValidator
|
|
|
|
def validate( # noqa: PLR0913
|
|
self,
|
|
template_id: Annotated[
|
|
str | None,
|
|
Argument(help="Template ID to validate (omit to validate all templates)"),
|
|
] = None,
|
|
*,
|
|
path: Annotated[
|
|
str | None,
|
|
Option("--path", help="Path to template directory for validation"),
|
|
] = None,
|
|
all_templates: Annotated[
|
|
bool,
|
|
Option("--all", help="Validate all Swarm templates (default when no template ID is provided)"),
|
|
] = False,
|
|
verbose: Annotated[bool, Option("--verbose", "-v", help="Show detailed validation information")] = False,
|
|
semantic: Annotated[
|
|
bool,
|
|
Option(
|
|
"--semantic/--no-semantic",
|
|
help="Enable semantic validation for rendered files",
|
|
),
|
|
] = True,
|
|
matrix: Annotated[
|
|
bool,
|
|
Option(
|
|
"--matrix",
|
|
help="Validate all reachable dependency states for a single template",
|
|
),
|
|
] = False,
|
|
kind: Annotated[
|
|
bool,
|
|
Option(
|
|
"--kind",
|
|
help="Enable dependency-matrix Docker Compose validation",
|
|
),
|
|
] = False,
|
|
docker: Annotated[
|
|
bool,
|
|
Option(
|
|
"--docker/--no-docker",
|
|
help="Alias for --kind Docker Compose validation",
|
|
),
|
|
] = False,
|
|
docker_test_all: Annotated[
|
|
bool,
|
|
Option(
|
|
"--docker-test-all",
|
|
help="Alias for --matrix --kind Docker Compose validation",
|
|
),
|
|
] = False,
|
|
) -> None:
|
|
"""Validate Swarm templates."""
|
|
kind_enabled = kind or docker or docker_test_all
|
|
matrix_enabled = matrix or docker_test_all
|
|
kind_validator = self.kind_validator_class(verbose).validate_rendered_files if kind_enabled else None
|
|
validate_templates(
|
|
self,
|
|
template_id,
|
|
path,
|
|
ValidationConfig(
|
|
verbose=verbose,
|
|
semantic=semantic,
|
|
matrix=matrix_enabled,
|
|
kind=kind_enabled,
|
|
all_templates=all_templates,
|
|
kind_validator=kind_validator,
|
|
),
|
|
)
|
|
|
|
|
|
registry.register(SwarmModule)
|