Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

elasticsearch_config.py 3.1KB

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