diff --git a/kubernetes/helm/openrag/templates/backend/backend-dotenv.yaml b/kubernetes/helm/openrag/templates/backend/backend-dotenv.yaml index 6cbdbfd65..0566f48ae 100644 --- a/kubernetes/helm/openrag/templates/backend/backend-dotenv.yaml +++ b/kubernetes/helm/openrag/templates/backend/backend-dotenv.yaml @@ -150,6 +150,11 @@ stringData: {{- if and .Values.global.docling.scheme .Values.global.docling.host .Values.global.docling.port }} DOCLING_SERVE_URL={{ printf "%s://%s:%v" .Values.global.docling.scheme .Values.global.docling.host .Values.global.docling.port | quote }} {{- end }} + {{- if hasKey .Values.global.docling "verifySsl" }} + DOCLING_SERVE_VERIFY_SSL={{ ternary "true" "false" .Values.global.docling.verifySsl | quote }} + {{- else }} + DOCLING_SERVE_VERIFY_SSL="true" + {{- end }} # Langflow auth {{- if .Values.langflow.auth.superuser }} diff --git a/kubernetes/helm/openrag/templates/langflow/langflow-dotenv.yaml b/kubernetes/helm/openrag/templates/langflow/langflow-dotenv.yaml index 88a6b86a6..b2b669378 100644 --- a/kubernetes/helm/openrag/templates/langflow/langflow-dotenv.yaml +++ b/kubernetes/helm/openrag/templates/langflow/langflow-dotenv.yaml @@ -107,6 +107,11 @@ stringData: {{- if and .Values.global.docling.scheme .Values.global.docling.host .Values.global.docling.port }} DOCLING_SERVE_URL={{ printf "%s://%s:%v" .Values.global.docling.scheme .Values.global.docling.host .Values.global.docling.port | quote }} {{- end }} + {{- if hasKey .Values.global.docling "verifySsl" }} + DOCLING_SERVE_VERIFY_SSL={{ ternary "true" "false" .Values.global.docling.verifySsl | quote }} + {{- else }} + DOCLING_SERVE_VERIFY_SSL="true" + {{- end }} # OpenSearch connection (for flows) OPENSEARCH_HOST={{ include "openrag.langflow.opensearch.host" . | quote }} diff --git a/kubernetes/helm/openrag/values.yaml b/kubernetes/helm/openrag/values.yaml index d21c18d47..461474ae3 100644 --- a/kubernetes/helm/openrag/values.yaml +++ b/kubernetes/helm/openrag/values.yaml @@ -33,6 +33,7 @@ global: host: docling-serve.docling.svc.cluster.local port: 5001 scheme: "http" + verifySsl: false # Shared OAuth credentials (same across all tenants) oauth: @@ -179,7 +180,7 @@ langflow: host: "https://cloud.langfuse.com" # Variables to expose to flows - variablesToGetFromEnvironment: "JWT,OPENRAG-QUERY-FILTER,OPENSEARCH_PASSWORD,OPENSEARCH_URL,OPENSEARCH_INDEX_NAME,DOCLING_SERVE_URL,DOCLING_TASK_ID,OWNER,OWNER_NAME,OWNER_EMAIL,CONNECTOR_TYPE,DOCUMENT_ID,SOURCE_URL,ALLOWED_USERS,ALLOWED_GROUPS,ALLOWED_PRINCIPALS,FILENAME,MIMETYPE,FILESIZE,SELECTED_EMBEDDING_MODEL,OPENAI_API_KEY,ANTHROPIC_API_KEY,WATSONX_APIKEY,WATSONX_URL,WATSONX_PROJECT_ID,OLLAMA_BASE_URL,OPENRAG_INGEST_URL,OPENRAG_INGEST_TOKEN,OPENRAG_INGEST_RUN_ID,OPENRAG_INGEST_BATCH_SIZE" + variablesToGetFromEnvironment: "JWT,OPENRAG-QUERY-FILTER,OPENSEARCH_PASSWORD,OPENSEARCH_URL,OPENSEARCH_INDEX_NAME,DOCLING_SERVE_URL,DOCLING_SERVE_VERIFY_SSL,DOCLING_TASK_ID,OWNER,OWNER_NAME,OWNER_EMAIL,CONNECTOR_TYPE,DOCUMENT_ID,SOURCE_URL,ALLOWED_USERS,ALLOWED_GROUPS,ALLOWED_PRINCIPALS,FILENAME,MIMETYPE,FILESIZE,SELECTED_EMBEDDING_MODEL,OPENAI_API_KEY,ANTHROPIC_API_KEY,WATSONX_APIKEY,WATSONX_URL,WATSONX_PROJECT_ID,OLLAMA_BASE_URL,OPENRAG_INGEST_URL,OPENRAG_INGEST_TOKEN,OPENRAG_INGEST_RUN_ID,OPENRAG_INGEST_BATCH_SIZE" # Probes livenessProbe: diff --git a/kubernetes/operator/api/v1alpha1/openrag_types.go b/kubernetes/operator/api/v1alpha1/openrag_types.go index 6ec4495b2..546ef7acc 100644 --- a/kubernetes/operator/api/v1alpha1/openrag_types.go +++ b/kubernetes/operator/api/v1alpha1/openrag_types.go @@ -387,6 +387,10 @@ type DoclingSpec struct { // +optional // +kubebuilder:default="http" Scheme string `json:"scheme,omitempty"` + + // +optional + // +kubebuilder:default=false + VerifySsl *bool `json:"verifySsl,omitempty"` } // DoclingServeSpec configures the Docling serve component (API server). diff --git a/kubernetes/operator/internal/controller/env.go b/kubernetes/operator/internal/controller/env.go index 195b98c50..5d3445f00 100644 --- a/kubernetes/operator/internal/controller/env.go +++ b/kubernetes/operator/internal/controller/env.go @@ -34,7 +34,7 @@ func NewEnvVarManager() *EnvVarManager { "LANGFLOW_DATABASE_URL": "sqlite:////app/data/langflow.db", // Variables to expose to Langflow components - "LANGFLOW_VARIABLES_TO_GET_FROM_ENVIRONMENT": "JWT,OPENRAG_QUERY_FILTER,OPENSEARCH_PASSWORD,OPENSEARCH_URL,OPENSEARCH_INDEX_NAME,DOCLING_SERVE_URL,DOCLING_TASK_ID,OWNER,OWNER_NAME,OWNER_EMAIL,CONNECTOR_TYPE,DOCUMENT_ID,SOURCE_URL,ALLOWED_USERS,ALLOWED_GROUPS,ALLOWED_PRINCIPALS,FILENAME,MIMETYPE,FILESIZE,SELECTED_EMBEDDING_MODEL,OPENAI_API_KEY,ANTHROPIC_API_KEY,WATSONX_API_KEY,WATSONX_ENDPOINT,WATSONX_PROJECT_ID,OLLAMA_BASE_URL,OPENRAG_INGEST_URL,OPENRAG_INGEST_TOKEN,OPENRAG_INGEST_RUN_ID,OPENRAG_INGEST_BATCH_SIZE", + "LANGFLOW_VARIABLES_TO_GET_FROM_ENVIRONMENT": "JWT,OPENRAG_QUERY_FILTER,OPENSEARCH_PASSWORD,OPENSEARCH_URL,OPENSEARCH_INDEX_NAME,DOCLING_SERVE_URL,DOCLING_SERVE_VERIFY_SSL,DOCLING_TASK_ID,OWNER,OWNER_NAME,OWNER_EMAIL,CONNECTOR_TYPE,DOCUMENT_ID,SOURCE_URL,ALLOWED_USERS,ALLOWED_GROUPS,ALLOWED_PRINCIPALS,FILENAME,MIMETYPE,FILESIZE,SELECTED_EMBEDDING_MODEL,OPENAI_API_KEY,ANTHROPIC_API_KEY,WATSONX_API_KEY,WATSONX_ENDPOINT,WATSONX_PROJECT_ID,OLLAMA_BASE_URL,OPENRAG_INGEST_URL,OPENRAG_INGEST_TOKEN,OPENRAG_INGEST_RUN_ID,OPENRAG_INGEST_BATCH_SIZE", // Authentication and user management "LANGFLOW_SKIP_AUTH_AUTO_LOGIN": "true", @@ -83,7 +83,8 @@ func NewEnvVarManager() *EnvVarManager { "OPENSEARCH_INDEX_NAME": "None", // Docling defaults (for variables in LANGFLOW_VARIABLES_TO_GET_FROM_ENVIRONMENT) - "DOCLING_SERVE_URL": "None", + "DOCLING_SERVE_URL": "None", + "DOCLING_SERVE_VERIFY_SSL": "false", // Provider API keys (defaults to None, overridden by CR spec) "OPENAI_API_KEY": "None", @@ -145,6 +146,7 @@ func NewEnvVarManager() *EnvVarManager { "WATSONX_API_KEY": "", "WATSONX_ENDPOINT": "", "WATSONX_PROJECT_ID": "", + "DOCLING_SERVE_VERIFY_SSL": "false", }, DefaultOpenRagFEEnvVars: map[string]string{ // Frontend environment variables will be added here diff --git a/kubernetes/operator/internal/controller/env_test.go b/kubernetes/operator/internal/controller/env_test.go index d02d36e79..f4a0cc697 100644 --- a/kubernetes/operator/internal/controller/env_test.go +++ b/kubernetes/operator/internal/controller/env_test.go @@ -451,7 +451,7 @@ func TestEnvVarManager_EnsureRequiredEnvVars_Integration(t *testing.T) { // Parse the required variables list requiredVars := []string{"JWT", "OPENRAG_QUERY_FILTER", "OPENSEARCH_PASSWORD", "OPENSEARCH_URL", - "OPENSEARCH_INDEX_NAME", "DOCLING_SERVE_URL", "DOCLING_TASK_ID", "OWNER", "OWNER_NAME", + "OPENSEARCH_INDEX_NAME", "DOCLING_SERVE_URL", "DOCLING_SERVE_VERIFY_SSL", "DOCLING_TASK_ID", "OWNER", "OWNER_NAME", "OWNER_EMAIL", "CONNECTOR_TYPE", "DOCUMENT_ID", "SOURCE_URL", "ALLOWED_USERS", "ALLOWED_GROUPS", "FILENAME", "MIMETYPE", "FILESIZE", "SELECTED_EMBEDDING_MODEL", "OPENAI_API_KEY", "ANTHROPIC_API_KEY", "WATSONX_API_KEY", "WATSONX_ENDPOINT", @@ -470,6 +470,7 @@ func TestEnvVarManager_EnsureRequiredEnvVars_Integration(t *testing.T) { assert.Equal(t, "None", envVars["OPENSEARCH_URL"], "OPENSEARCH_URL should have default 'None'") assert.Equal(t, "None", envVars["OPENSEARCH_INDEX_NAME"], "OPENSEARCH_INDEX_NAME should have default 'None'") assert.Equal(t, "None", envVars["DOCLING_SERVE_URL"], "DOCLING_SERVE_URL should have default 'None'") + assert.Equal(t, "false", envVars["DOCLING_SERVE_VERIFY_SSL"], "DOCLING_SERVE_VERIFY_SSL should have default 'false'") } func TestEnvVarManager_EnsureRequiredEnvVars_CustomList(t *testing.T) { diff --git a/kubernetes/operator/internal/controller/openrag_controller.go b/kubernetes/operator/internal/controller/openrag_controller.go index c7d56894d..6b3ff2371 100644 --- a/kubernetes/operator/internal/controller/openrag_controller.go +++ b/kubernetes/operator/internal/controller/openrag_controller.go @@ -474,6 +474,9 @@ func (r *OpenRAGReconciler) buildBackendEnv(ctx context.Context, o *openragv1alp port = 5001 } envVars["DOCLING_SERVE_URL"] = fmt.Sprintf("%s://%s:%d", scheme, d.Host, port) + if d.VerifySsl != nil { + envVars["DOCLING_SERVE_VERIFY_SSL"] = strconv.FormatBool(*d.VerifySsl) + } } // Convert map to .env file format @@ -568,6 +571,9 @@ func (r *OpenRAGReconciler) buildLangflowEnv(ctx context.Context, o *openragv1al port = 5001 } envVars["DOCLING_SERVE_URL"] = fmt.Sprintf("%s://%s:%d", scheme, d.Host, port) + if d.VerifySsl != nil { + envVars["DOCLING_SERVE_VERIFY_SSL"] = strconv.FormatBool(*d.VerifySsl) + } } // Ensure all variables in LANGFLOW_VARIABLES_TO_GET_FROM_ENVIRONMENT exist with at least "None" value