You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

elasticsearch_config.py 3.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. from typing import Optional
  2. from pydantic import Field, PositiveInt, model_validator
  3. from pydantic_settings import BaseSettings
  4. class ElasticsearchConfig(BaseSettings):
  5. """
  6. Configuration settings for both self-managed and Elastic Cloud deployments.
  7. Can load from environment variables or .env files.
  8. """
  9. ELASTICSEARCH_HOST: Optional[str] = Field(
  10. description="Hostname or IP address of the Elasticsearch server (e.g., 'localhost' or '192.168.1.100')",
  11. default="127.0.0.1",
  12. )
  13. ELASTICSEARCH_PORT: PositiveInt = Field(
  14. description="Port number on which the Elasticsearch server is listening (default is 9200)",
  15. default=9200,
  16. )
  17. ELASTICSEARCH_USERNAME: Optional[str] = Field(
  18. description="Username for authenticating with Elasticsearch (default is 'elastic')",
  19. default="elastic",
  20. )
  21. ELASTICSEARCH_PASSWORD: Optional[str] = Field(
  22. description="Password for authenticating with Elasticsearch (default is 'elastic')",
  23. default="elastic",
  24. )
  25. # Elastic Cloud (optional)
  26. ELASTICSEARCH_USE_CLOUD: Optional[bool] = Field(
  27. description="Set to True to use Elastic Cloud instead of self-hosted Elasticsearch", default=False
  28. )
  29. ELASTICSEARCH_CLOUD_URL: Optional[str] = Field(
  30. description="Full URL for Elastic Cloud deployment (e.g., 'https://example.es.region.aws.found.io:443')",
  31. default=None,
  32. )
  33. ELASTICSEARCH_API_KEY: Optional[str] = Field(
  34. description="API key for authenticating with Elastic Cloud", default=None
  35. )
  36. # Common options
  37. ELASTICSEARCH_CA_CERTS: Optional[str] = Field(
  38. description="Path to CA certificate file for SSL verification", default=None
  39. )
  40. ELASTICSEARCH_VERIFY_CERTS: bool = Field(
  41. description="Whether to verify SSL certificates (default is False)", default=False
  42. )
  43. ELASTICSEARCH_REQUEST_TIMEOUT: int = Field(
  44. description="Request timeout in milliseconds (default is 100000)", default=100000
  45. )
  46. ELASTICSEARCH_RETRY_ON_TIMEOUT: bool = Field(
  47. description="Whether to retry requests on timeout (default is True)", default=True
  48. )
  49. ELASTICSEARCH_MAX_RETRIES: int = Field(
  50. description="Maximum number of retry attempts (default is 10000)", default=10000
  51. )
  52. @model_validator(mode="after")
  53. def validate_elasticsearch_config(self):
  54. """Validate Elasticsearch configuration based on deployment type."""
  55. if self.ELASTICSEARCH_USE_CLOUD:
  56. if not self.ELASTICSEARCH_CLOUD_URL:
  57. raise ValueError("ELASTICSEARCH_CLOUD_URL is required when using Elastic Cloud")
  58. if not self.ELASTICSEARCH_API_KEY:
  59. raise ValueError("ELASTICSEARCH_API_KEY is required when using Elastic Cloud")
  60. else:
  61. if not self.ELASTICSEARCH_HOST:
  62. raise ValueError("ELASTICSEARCH_HOST is required for self-hosted Elasticsearch")
  63. if not self.ELASTICSEARCH_USERNAME:
  64. raise ValueError("ELASTICSEARCH_USERNAME is required for self-hosted Elasticsearch")
  65. if not self.ELASTICSEARCH_PASSWORD:
  66. raise ValueError("ELASTICSEARCH_PASSWORD is required for self-hosted Elasticsearch")
  67. return self