1414import tarfile
1515import zipfile
1616import urllib .request
17+ import urllib .error
1718from pathlib import Path
1819from typing import Optional , Dict
1920from datetime import datetime
2021from jinja2 import Template
22+ import boto3
23+ from botocore .auth import SigV4Auth
24+ from botocore .awsrequest import AWSRequest
2125
2226
2327class RegistryInitializer :
@@ -187,14 +191,18 @@ def load_env_file(self):
187191 self .env_vars [key ] = value
188192 else :
189193 print ("⚠️ Warning: .env file not found, using default values" )
190- self .env_vars .setdefault ("REG_LOADER_IMAGE" , "nasapds/registry-loader:latest" )
194+ self .env_vars .setdefault ("REG_LOADER_IMAGE" , "nasapds/registry-loader-lite :latest" )
191195 self .env_vars .setdefault ("TEST_DATA_URL" ,
192196 "https://github.com/NASA-PDS/registry-ref-data/releases/download/Latest/custom-datasets.tar.gz" )
193197 self .env_vars .setdefault ("TEST_DATA_LIDVID" ,
194198 "urn:nasa:pds:mars2020.spice::1.0 urn:nasa:pds:mars2020.spice::2.0 urn:nasa:pds:mars2020.spice::3.0" )
195199 self .env_vars .setdefault ("CONTAINER_HARVEST_DATA_DIR" , "/data" )
196200 self .env_vars .setdefault ("REG_DATA_VOLUME" , "data-volume" )
197201
202+ def add_locally_defined_env_vars (self ) -> None :
203+ for k , v in os .environ .items ():
204+ self .env_vars [k ] = v
205+
198206 def generate_registry_config (self ):
199207 """Generate registry connection XML configuration."""
200208 self .print_section ("📝" , "Generating registry connection configuration..." )
@@ -310,6 +318,45 @@ def run_docker_container(self, purpose: str, command: list):
310318 self .run_command (docker_cmd , capture = False )
311319 print ("-" * 50 + "\n " )
312320
321+ def create_aliases (self ):
322+ """Create OpenSearch aliases, until registry-manager does it."""
323+ self .print_section ("🔗" , "Create aliases, until registry-manager does it" )
324+
325+ alias_file = self .docker_dir / "scripts" / "aliases" / "alias_registry.json"
326+ if not alias_file .exists ():
327+ print (f" Warning: Alias file not found: { alias_file } " )
328+ return
329+
330+ alias_content = alias_file .read_text ()
331+ url = f"{ self .opensearch_endpoint } /_aliases"
332+
333+ session = boto3 .Session (region_name = self .aws_region )
334+ caller = session .client ("sts" ).get_caller_identity ()
335+ print (f" Calling as: { caller ['Arn' ]} " )
336+ credentials = session .get_credentials ().get_frozen_credentials ()
337+
338+ aws_request = AWSRequest (
339+ method = "POST" ,
340+ url = url ,
341+ data = alias_content ,
342+ headers = {"Content-Type" : "application/json" },
343+ )
344+ SigV4Auth (credentials , "aoss" , self .aws_region ).add_auth (aws_request )
345+
346+ req = urllib .request .Request (
347+ url ,
348+ data = alias_content .encode ("utf-8" ),
349+ headers = dict (aws_request .headers ),
350+ method = "POST" ,
351+ )
352+
353+ try :
354+ with urllib .request .urlopen (req ) as response :
355+ print (f" Aliases created: { response .read ().decode ()} \n " )
356+ except urllib .error .HTTPError as e :
357+ print (f" Error creating aliases: { e .read ().decode ()} \n " )
358+ raise
359+
313360 def cleanup_temp_files (self ):
314361 """Clean up temporary authentication configuration files."""
315362 temp_files = [
@@ -413,6 +460,7 @@ def run(self) -> int:
413460
414461 # Setup
415462 self .load_env_file ()
463+ self .add_locally_defined_env_vars ()
416464 self .generate_registry_config ()
417465 self .generate_auth_configs ()
418466
@@ -426,6 +474,7 @@ def run(self) -> int:
426474 except subprocess .CalledProcessError :
427475 print ("\n ⚠️ OpenSearch indexes probably already created, skip that step\n " )
428476
477+ self .create_aliases ()
429478 self .download_and_extract_test_data ()
430479 self .generate_harvest_config ()
431480 self .run_docker_container (
0 commit comments