@@ -24,17 +24,22 @@ data:
2424 OPENSEARCH_PROTOCOL = os.getenv('OPENSEARCH_PROTOCOL', 'https')
2525 OPENSEARCH_USER = os.getenv('OPENSEARCH_USER', 'admin')
2626 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')
2729 INDEX_NAME = os.getenv('INDEX_NAME', 'rag-documents')
2830 EMBEDDINGS_FILE = os.getenv('EMBEDDINGS_FILE', '/data/stackable-docs-embeddings.json')
2931
32+ OPENSEARCH_BASIC_AUTH = HTTPBasicAuth(OPENSEARCH_USER, OPENSEARCH_PASSWORD)
33+ OPENSEARCH_DASHBOARDS_BASE_URL = f'http://{OPENSEARCH_DASHBOARDS_HOST}:{OPENSEARCH_DASHBOARDS_PORT}'
34+
3035 def wait_for_opensearch():
3136 """Wait for OpenSearch to be ready."""
3237 print("Waiting for OpenSearch to be ready...")
3338 for i in range(60):
3439 try:
3540 response = requests.get(
3641 OPENSEARCH_HOSTS,
37- auth=HTTPBasicAuth(OPENSEARCH_USER, OPENSEARCH_PASSWORD) ,
42+ auth=OPENSEARCH_BASIC_AUTH ,
3843 verify=False,
3944 timeout=5
4045 )
4853 print("[ERROR] OpenSearch did not become ready in time")
4954 return False
5055
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+
5177 def index_needs_loading(client):
5278 """Check if index exists and has documents. Returns True if loading is needed."""
5379 if not client.indices.exists(index=INDEX_NAME):
@@ -137,17 +163,13 @@ data:
137163
138164 def create_index_pattern():
139165 """Create index pattern in OpenSearch Dashboards and set as default."""
140- dashboards_host = os.getenv('DASHBOARDS_HOST', 'opensearch-dashboards')
141- dashboards_port = os.getenv('DASHBOARDS_PORT', '5601')
142- base_url = f'http://{dashboards_host}:{dashboards_port}'
143166 headers = {"osd-xsrf": "true"}
144- auth = HTTPBasicAuth(OPENSEARCH_USER, OPENSEARCH_PASSWORD)
145167
146168 # Create index pattern
147169 response = requests.post(
148- f'{base_url }/api/saved_objects/index-pattern/{INDEX_NAME}?overwrite=true',
170+ f'{OPENSEARCH_DASHBOARDS_BASE_URL }/api/saved_objects/index-pattern/{INDEX_NAME}?overwrite=true',
149171 json={"attributes": {"title": INDEX_NAME, "timeFieldName": "timestamp"}},
150- auth=auth , headers=headers, timeout=10
172+ auth=OPENSEARCH_BASIC_AUTH , headers=headers, timeout=10
151173 )
152174 if response.status_code not in (200, 201, 409):
153175 print(f"[ERROR] Failed to create index pattern: {response.status_code} - {response.text}")
@@ -156,9 +178,9 @@ data:
156178
157179 # Set as default
158180 response = requests.post(
159- f'{base_url }/api/opensearch-dashboards/settings',
181+ f'{OPENSEARCH_DASHBOARDS_BASE_URL }/api/opensearch-dashboards/settings',
160182 json={"changes": {"defaultIndex": INDEX_NAME}},
161- auth=auth , headers=headers, timeout=10
183+ auth=OPENSEARCH_BASIC_AUTH , headers=headers, timeout=10
162184 )
163185 if response.status_code in (200, 201):
164186 print(f"[OK] Set {INDEX_NAME} as default index pattern")
@@ -203,6 +225,9 @@ data:
203225 if not wait_for_opensearch():
204226 return 1
205227
228+ if not wait_for_opensearch_dashboards():
229+ return 1
230+
206231 client = OpenSearch(
207232 hosts=[{'host': OPENSEARCH_HOSTNAME, 'port': OPENSEARCH_PORT}],
208233 http_auth=(OPENSEARCH_USER, OPENSEARCH_PASSWORD),
0 commit comments