variables.py 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. from typing import Dict, Any
  2. from ...core.variables import BaseVariables
  3. class ComposeVariables(BaseVariables):
  4. """Compose-specific variable sets declaration.
  5. Each entry in `variable_sets` is now a mapping with a `prompt` to ask
  6. whether the set should be applied and a `variables` mapping containing
  7. the individual variable definitions.
  8. """
  9. def __init__(self) -> None:
  10. self.variable_sets: Dict[str, Dict[str, Any]] = {
  11. "general": {
  12. "always": True,
  13. "prompt": "Do you want to change the general settings?",
  14. "variables": {
  15. "service_name": {"display_name": "Service name", "default": None, "type": "str", "prompt": "Enter service name"},
  16. "service_port": {"display_name": "Service port", "default": None, "type": "int", "prompt": "Enter service port(s)", "description": "Port number(s) the service will expose (has to be a single port)"},
  17. "container_name": {"display_name": "Container name", "default": None, "type": "str", "prompt": "Enter container name"},
  18. "container_hostname": {"display_name": "Container hostname", "default": None, "type": "str", "prompt": "Enter container hostname", "description": "Hostname that will be set inside the container"},
  19. "docker_network": {"display_name": "Docker network", "default": "bridge", "type": "str", "prompt": "Enter Docker network name"},
  20. "restart_policy": {"display_name": "Restart policy", "default": "unless-stopped", "type": "str", "prompt": "Enter restart policy"},
  21. },
  22. },
  23. "swarm": {
  24. "prompt_enable": "Do you want to enable swarm mode?",
  25. "prompt": "Do you want to change the Swarm settings?",
  26. "variables": {
  27. "swarm_replicas": {"display_name": "Number of replicas", "default": 1, "type": "int", "prompt": "Enter number of replicas"},
  28. },
  29. },
  30. "traefik": {
  31. "prompt_enable": "Do you want to add Traefik labels?",
  32. "prompt": "Do you want to change the Traefik labels?",
  33. "variables": {
  34. "traefik_enable": {"display_name": "Enable Traefik", "default": True, "type": "bool", "prompt": "Enable Traefik routing for this service?"},
  35. "traefik_host": {"display_name": "Routing Rule Host", "default": None, "type": "str", "prompt": "Enter hostname for the routing rule (e.g., example.com))", "description": "Domain name that Traefik will use to route traffic to this service"},
  36. "traefik_tls": {"display_name": "Enable TLS", "default": False, "type": "bool", "prompt": "Enable TLS for this router?", "description": "Whether to enable HTTPS/TLS encryption for this route"},
  37. "traefik_certresolver": {"display_name": "Certificate resolver", "type": "str", "prompt": "Enter certificate resolver name", "description": "Name of the certificate resolver to use for obtaining SSL certificates"},
  38. "traefik_middleware": {"display_name": "Middlewares", "default": None, "type": "str", "prompt": "Enter middlewares (comma-separated, leave empty for none)", "description": "Comma-separated list of Traefik middlewares to apply to this route"},
  39. "traefik_entrypoint": {"display_name": "EntryPoint", "default": "web", "type": "str", "prompt": "Enter entrypoint name", "description": "Name of the Traefik entrypoint to use for this router"},
  40. },
  41. },
  42. }
  43. super().__init__()