@@ -18,21 +18,28 @@ data:
1818 from requests.auth import HTTPBasicAuth
1919
2020 # Configuration
21- OPENSEARCH_HOST = os.getenv('OPENSEARCH_HOST', 'opensearch')
22- OPENSEARCH_PORT = int(os.getenv('OPENSEARCH_PORT', '9200'))
21+ OPENSEARCH_HOSTS = os.getenv('OPENSEARCH_HOSTS', 'https://opensearch:9200')
22+ OPENSEARCH_HOSTNAME = os.getenv('OPENSEARCH_HOSTNAME', 'opensearch')
23+ OPENSEARCH_PORT = os.getenv('OPENSEARCH_PORT', '9200')
24+ OPENSEARCH_PROTOCOL = os.getenv('OPENSEARCH_PROTOCOL', 'https')
2325 OPENSEARCH_USER = os.getenv('OPENSEARCH_USER', 'admin')
2426 OPENSEARCH_PASSWORD = os.getenv('OPENSEARCH_PASSWORD', 'adminadmin')
27+ OPENSEARCH_DASHBOARDS_HOST = os.getenv('DASHBOARDS_HOST', 'opensearch-dashboards')
28+ OPENSEARCH_DASHBOARDS_PORT = os.getenv('DASHBOARDS_PORT', '5601')
2529 INDEX_NAME = os.getenv('INDEX_NAME', 'rag-documents')
2630 EMBEDDINGS_FILE = os.getenv('EMBEDDINGS_FILE', '/data/stackable-docs-embeddings.json')
2731
32+ OPENSEARCH_BASIC_AUTH = HTTPBasicAuth(OPENSEARCH_USER, OPENSEARCH_PASSWORD)
33+ OPENSEARCH_DASHBOARDS_BASE_URL = f'http://{OPENSEARCH_DASHBOARDS_HOST}:{OPENSEARCH_DASHBOARDS_PORT}'
34+
2835 def wait_for_opensearch():
2936 """Wait for OpenSearch to be ready."""
3037 print("Waiting for OpenSearch to be ready...")
3138 for i in range(60):
3239 try:
3340 response = requests.get(
34- f'https://{OPENSEARCH_HOST}:{OPENSEARCH_PORT}' ,
35- auth=HTTPBasicAuth(OPENSEARCH_USER, OPENSEARCH_PASSWORD) ,
41+ OPENSEARCH_HOSTS ,
42+ auth=OPENSEARCH_BASIC_AUTH ,
3643 verify=False,
3744 timeout=5
3845 )
4653 print("[ERROR] OpenSearch did not become ready in time")
4754 return False
4855
56+ def wait_for_opensearch_dashboards():
57+ """Wait for OpenSearch Dashboards to be ready."""
58+ print("Waiting for OpenSearch Dashboards to be ready...")
59+ for i in range(60):
60+ try:
61+ response = requests.get(
62+ OPENSEARCH_DASHBOARDS_BASE_URL,
63+ auth=OPENSEARCH_BASIC_AUTH,
64+ verify=False,
65+ timeout=5
66+ )
67+ if response.status_code == 200:
68+ print("[OK] OpenSearch Dashboards is ready!")
69+ return True
70+ except Exception:
71+ print(f"Waiting for OpenSearch Dashboards... ({i+1}/60)")
72+ time.sleep(5)
73+
74+ print("[ERROR] OpenSearch Dashboards did not become ready in time")
75+ return False
76+
4977 def index_needs_loading(client):
5078 """Check if index exists and has documents. Returns True if loading is needed."""
5179 if not client.indices.exists(index=INDEX_NAME):
@@ -135,17 +163,13 @@ data:
135163
136164 def create_index_pattern():
137165 """Create index pattern in OpenSearch Dashboards and set as default."""
138- dashboards_host = os.getenv('DASHBOARDS_HOST', 'opensearch-dashboards')
139- dashboards_port = os.getenv('DASHBOARDS_PORT', '5601')
140- base_url = f'http://{dashboards_host}:{dashboards_port}'
141166 headers = {"osd-xsrf": "true"}
142- auth = HTTPBasicAuth(OPENSEARCH_USER, OPENSEARCH_PASSWORD)
143167
144168 # Create index pattern
145- response = requests.put (
146- f'{base_url }/api/saved_objects/index-pattern/{INDEX_NAME}?overwrite=true',
169+ response = requests.post (
170+ f'{OPENSEARCH_DASHBOARDS_BASE_URL }/api/saved_objects/index-pattern/{INDEX_NAME}?overwrite=true',
147171 json={"attributes": {"title": INDEX_NAME, "timeFieldName": "timestamp"}},
148- auth=auth , headers=headers, timeout=10
172+ auth=OPENSEARCH_BASIC_AUTH , headers=headers, timeout=10
149173 )
150174 if response.status_code not in (200, 201, 409):
151175 print(f"[ERROR] Failed to create index pattern: {response.status_code} - {response.text}")
@@ -154,9 +178,9 @@ data:
154178
155179 # Set as default
156180 response = requests.post(
157- f'{base_url }/api/opensearch-dashboards/settings',
181+ f'{OPENSEARCH_DASHBOARDS_BASE_URL }/api/opensearch-dashboards/settings',
158182 json={"changes": {"defaultIndex": INDEX_NAME}},
159- auth=auth , headers=headers, timeout=10
183+ auth=OPENSEARCH_BASIC_AUTH , headers=headers, timeout=10
160184 )
161185 if response.status_code in (200, 201):
162186 print(f"[OK] Set {INDEX_NAME} as default index pattern")
@@ -201,10 +225,13 @@ data:
201225 if not wait_for_opensearch():
202226 return 1
203227
228+ if not wait_for_opensearch_dashboards():
229+ return 1
230+
204231 client = OpenSearch(
205- hosts=[{'host': OPENSEARCH_HOST , 'port': OPENSEARCH_PORT}],
232+ hosts=[{'host': OPENSEARCH_HOSTNAME , 'port': OPENSEARCH_PORT}],
206233 http_auth=(OPENSEARCH_USER, OPENSEARCH_PASSWORD),
207- use_ssl=True ,
234+ use_ssl=OPENSEARCH_PROTOCOL == 'https' ,
208235 verify_certs=False,
209236 ssl_show_warn=False
210237 )
@@ -277,10 +304,6 @@ spec:
277304 pip install -q opensearch-py requests urllib3
278305 python -u /scripts/load.py
279306 env :
280- - name : OPENSEARCH_HOST
281- value : " opensearch"
282- - name : OPENSEARCH_PORT
283- value : " 9200"
284307 - name : OPENSEARCH_USER
285308 value : " admin"
286309 - name : OPENSEARCH_PASSWORD
@@ -292,6 +315,9 @@ spec:
292315 value : " rag-documents"
293316 - name : EMBEDDINGS_FILE
294317 value : " /data/stackable-docs-embeddings.json"
318+ envFrom :
319+ - configMapRef :
320+ name : opensearch
295321 volumeMounts :
296322 - name : script
297323 mountPath : /scripts
0 commit comments