Skip to content

Commit 11b7ec1

Browse files
author
Thomas Loubrieu
committed
wip: registry deployed in dev with api and sweeper manually added from their own terraform, integration test still fail.
1 parent 0bfae4b commit 11b7ec1

8 files changed

Lines changed: 120 additions & 222 deletions

File tree

terraform/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ Then set you python environment:
114114

115115
python3.12 -m venv venv
116116
source venv/bin/activate
117-
pip install jinja2 requests
117+
pip install jinja2 requests boto3
118118

119119

120120
And run the script to initialize the registry:

terraform/data.tf

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,12 @@ data "aws_ssm_parameter" "opensearch_readonly_role_arn" {
88

99
data "aws_ssm_parameter" "lambda_execution_role_arn" {
1010
name = "/pds/cds-infra/iam/roles/registry/lambda_execution_role_arn"
11-
}
11+
}
12+
13+
data "aws_ssm_parameter" "registry_api_ecs_task_role_arn" {
14+
name = "/pds/cds-infra/iam/roles/registry/ecs_task_role_arn"
15+
}
16+
17+
data "aws_ssm_parameter" "registry_api_ecs_task_execution_role_arn" {
18+
name = "/pds/cds-infra/iam/roles/registry/ecs_task_execution_role_arn"
19+
}

terraform/main.tf

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ module "opensearch" {
1414
vpc_id = var.vpc_id
1515
subnet_ids = var.subnet_ids
1616
admin_roles = concat(var.admin_roles, [data.aws_ssm_parameter.opensearch_admin_role_arn.value])
17-
readonly_roles = [data.aws_ssm_parameter.opensearch_readonly_role_arn.value]
17+
readonly_roles = [data.aws_ssm_parameter.opensearch_readonly_role_arn.value, data.aws_ssm_parameter.registry_api_ecs_task_role_arn.value]
1818
node_list = var.node_list
1919
aws_region = var.aws_region
2020
common_tags = var.common_tags
@@ -54,3 +54,23 @@ module "api_gateway" {
5454
aws_region = var.aws_region
5555
common_tags = var.common_tags
5656
}
57+
58+
# module "registry_api" {
59+
# source = "git::https://github.com/NASA-PDS/registry-api.git//terraform?ref=terraform_for_dev"
60+
# count = 0
61+
#
62+
# aws_region = var.aws_region
63+
# sprint_boot_args = "--openSearch.host=${module.opensearch.collection_endpoint} --openSearch.CCSEnabled=true --openSearch.username='' --openSearch.disciplineNodes=${join(",", var.node_list)} --registry.service.version=1.6.0-SNAPSHOT"
64+
# aws_s3_bucket_logs_id=var.aws_s3_bucket_logs_id
65+
# registry_api_docker_image=var.registry_api_docker_image
66+
# ecs_task_role = data.aws_ssm_parameter.registry_api_ecs_task_role_arn
67+
# ecs_task_execution_role = data.aws_ssm_parameter.registry_api_ecs_task_execution_role_arn
68+
# aws_fg_vpc = var.vpc_id
69+
# aws_fg_security_group = var.registry_api_ecs_service_security_group
70+
# aws_fg_subnets = var.subnet_ids
71+
# aws_lb_subnets = var.public_subnet_ids
72+
# aws_acm_certificate_arn = var.acm_certificate_arn
73+
#
74+
# common_tags = var.common_tags
75+
#
76+
# }

terraform/opensearch/data.tf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,4 @@ data "aws_ssm_parameter" "opensearch_tenant_core_cloudops_role_arns" {
99
}
1010

1111

12+

terraform/run-init-on-aws.py

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,14 @@
1414
import tarfile
1515
import zipfile
1616
import urllib.request
17+
import urllib.error
1718
from pathlib import Path
1819
from typing import Optional, Dict
1920
from datetime import datetime
2021
from jinja2 import Template
22+
import boto3
23+
from botocore.auth import SigV4Auth
24+
from botocore.awsrequest import AWSRequest
2125

2226

2327
class 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(

terraform/run-init-on-aws.sh

Lines changed: 0 additions & 214 deletions
This file was deleted.

terraform/terraform.tfvars.example

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,12 @@ enable_public_access = true
1616
# Option 2: VPC-only access via VPC endpoint (recommended for production)
1717
# enable_public_access = false
1818
# create_vpc_endpoint = true
19-
# vpc_id = "vpc-1234567890abcdef0"
20-
# subnet_ids = ["subnet-1234567890abcdef0", "subnet-0987654321fedcba0"]
21-
# security_group_ids = [] # Leave empty to create a default security group
19+
20+
# Needed for VPC end-point above and registry API load balancer and ECS service
21+
vpc_id = "vpc-1234567890abcdef0"
22+
subnet_ids = ["subnet-1234567890abcdef0", "subnet-0987654321fedcba0"]
23+
public_subnet_ids = ["subnet-3234567890abcdef0", "subnet-3987654321fedcba0"]
24+
security_group_id = [] # Leave empty to create a default security group
2225

2326
# Admin roles configuration (see DEPLOYMENT_STAGES.md for deployment workflow)
2427
# Stage 1 (initial): Deploy without admin role

0 commit comments

Comments
 (0)