Skip to content

Commit 7424e6e

Browse files
committed
update create domain method to take the request into account
1 parent 9c0c91c commit 7424e6e

File tree

2 files changed

+22
-46
lines changed

2 files changed

+22
-46
lines changed

localstack-core/localstack/services/opensearch/provider.py

Lines changed: 22 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import os
33
import re
44
import threading
5+
from copy import deepcopy
56
from datetime import datetime, timezone
67
from random import randint
78
from typing import Dict, Optional
@@ -12,15 +13,11 @@
1213
from localstack.aws.api.opensearch import (
1314
ARN,
1415
AccessPoliciesStatus,
15-
AdvancedOptions,
1616
AdvancedOptionsStatus,
1717
AdvancedSecurityOptions,
18-
AdvancedSecurityOptionsInput,
1918
AdvancedSecurityOptionsStatus,
20-
AIMLOptionsInput,
2119
AutoTuneDesiredState,
2220
AutoTuneOptions,
23-
AutoTuneOptionsInput,
2421
AutoTuneOptionsOutput,
2522
AutoTuneOptionsStatus,
2623
AutoTuneState,
@@ -30,6 +27,7 @@
3027
CognitoOptions,
3128
CognitoOptionsStatus,
3229
ColdStorageOptions,
30+
CreateDomainRequest,
3331
CreateDomainResponse,
3432
DeleteDomainResponse,
3533
DeploymentStatus,
@@ -50,41 +48,33 @@
5048
EncryptionAtRestOptionsStatus,
5149
EngineType,
5250
GetCompatibleVersionsResponse,
53-
IdentityCenterOptionsInput,
54-
IPAddressType,
5551
ListDomainNamesResponse,
5652
ListTagsResponse,
5753
ListVersionsResponse,
58-
LogPublishingOptions,
5954
LogPublishingOptionsStatus,
6055
MaxResults,
6156
NextToken,
6257
NodeToNodeEncryptionOptions,
6358
NodeToNodeEncryptionOptionsStatus,
64-
OffPeakWindowOptions,
6559
OpensearchApi,
6660
OpenSearchPartitionInstanceType,
6761
OptionState,
6862
OptionStatus,
69-
PolicyDocument,
7063
ResourceAlreadyExistsException,
7164
ResourceNotFoundException,
7265
RollbackOnDisable,
7366
ServiceSoftwareOptions,
7467
SnapshotOptions,
7568
SnapshotOptionsStatus,
76-
SoftwareUpdateOptions,
7769
StringList,
7870
TagList,
7971
TLSSecurityPolicy,
8072
UpdateDomainConfigRequest,
8173
UpdateDomainConfigResponse,
8274
ValidationException,
8375
VersionStatus,
84-
VersionString,
8576
VolumeType,
8677
VPCDerivedInfoStatus,
87-
VPCOptions,
8878
)
8979
from localstack.constants import OPENSEARCH_DEFAULT_VERSION
9080
from localstack.services.opensearch import versions
@@ -310,14 +300,20 @@ def get_domain_config_status() -> OptionStatus:
310300
)
311301

312302

313-
def get_domain_status(domain_key: DomainKey, deleted=False) -> DomainStatus:
303+
def get_domain_status(
304+
domain_key: DomainKey, deleted=False, request: CreateDomainRequest | None = None
305+
) -> DomainStatus:
314306
parsed_arn = parse_arn(domain_key.arn)
315307
store = OpensearchProvider.get_store(parsed_arn["account"], parsed_arn["region"])
316308
stored_status: DomainStatus = (
317309
store.opensearch_domains.get(domain_key.domain_name) or DomainStatus()
318310
)
319311
cluster_cfg = stored_status.get("ClusterConfig") or {}
320312
default_cfg = DEFAULT_OPENSEARCH_CLUSTER_CONFIG
313+
if request:
314+
stored_status = deepcopy(stored_status)
315+
stored_status.update(request)
316+
default_cfg.update(request.get("ClusterConfig", {}))
321317

322318
domain_processing_status = stored_status.get("DomainProcessingStatus", None)
323319
processing = stored_status.get("Processing", True)
@@ -353,7 +349,8 @@ def get_domain_status(domain_key: DomainKey, deleted=False) -> DomainStatus:
353349
),
354350
EngineVersion=stored_status.get("EngineVersion") or OPENSEARCH_DEFAULT_VERSION,
355351
Endpoint=stored_status.get("Endpoint", None),
356-
EBSOptions=EBSOptions(EBSEnabled=True, VolumeType=VolumeType.gp2, VolumeSize=10, Iops=0),
352+
EBSOptions=stored_status.get("EBSOptions")
353+
or EBSOptions(EBSEnabled=True, VolumeType=VolumeType.gp2, VolumeSize=10, Iops=0),
357354
CognitoOptions=CognitoOptions(Enabled=False),
358355
UpgradeProcessing=False,
359356
AccessPolicies=stored_status.get("AccessPolicies", ""),
@@ -363,6 +360,7 @@ def get_domain_status(domain_key: DomainKey, deleted=False) -> DomainStatus:
363360
AdvancedOptions={
364361
"override_main_response_version": "false",
365362
"rest.action.multi.allow_explicit_index": "true",
363+
**stored_status.get("AdvancedOptions", {}),
366364
},
367365
ServiceSoftwareOptions=ServiceSoftwareOptions(
368366
CurrentVersion="",
@@ -486,41 +484,19 @@ def _stop_clusters(self):
486484
for domain_name in store.opensearch_domains.keys():
487485
cluster_manager().remove(DomainKey(domain_name, region, account_id).arn)
488486

487+
@handler("CreateDomain", expand=False)
489488
def create_domain(
490-
self,
491-
context: RequestContext,
492-
domain_name: DomainName,
493-
engine_version: VersionString = None,
494-
cluster_config: ClusterConfig = None,
495-
ebs_options: EBSOptions = None,
496-
access_policies: PolicyDocument = None,
497-
ip_address_type: IPAddressType = None,
498-
snapshot_options: SnapshotOptions = None,
499-
vpc_options: VPCOptions = None,
500-
cognito_options: CognitoOptions = None,
501-
encryption_at_rest_options: EncryptionAtRestOptions = None,
502-
node_to_node_encryption_options: NodeToNodeEncryptionOptions = None,
503-
advanced_options: AdvancedOptions = None,
504-
log_publishing_options: LogPublishingOptions = None,
505-
domain_endpoint_options: DomainEndpointOptions = None,
506-
advanced_security_options: AdvancedSecurityOptionsInput = None,
507-
identity_center_options: IdentityCenterOptionsInput = None,
508-
tag_list: TagList = None,
509-
auto_tune_options: AutoTuneOptionsInput = None,
510-
off_peak_window_options: OffPeakWindowOptions = None,
511-
software_update_options: SoftwareUpdateOptions = None,
512-
aiml_options: AIMLOptionsInput = None,
513-
**kwargs,
489+
self, context: RequestContext, request: CreateDomainRequest
514490
) -> CreateDomainResponse:
515491
store = self.get_store(context.account_id, context.region)
516492

517-
if not is_valid_domain_name(domain_name):
493+
if not (domain_name := request.get("DomainName")) or not is_valid_domain_name(domain_name):
518494
# TODO: this should use the server-side validation framework at some point.
519495
raise ValidationException(
520496
"Member must satisfy regular expression pattern: [a-z][a-z0-9\\-]+"
521497
)
522498

523-
if domain_endpoint_options:
499+
if domain_endpoint_options := request.get("DomainEndpointOptions", {}):
524500
validate_endpoint_options(domain_endpoint_options)
525501

526502
with _domain_mutex:
@@ -533,21 +509,23 @@ def create_domain(
533509
region=context.region,
534510
account=context.account_id,
535511
)
536-
security_options = SecurityOptions.from_input(advanced_security_options)
512+
security_options = SecurityOptions.from_input(request.get("AdvancedSecurityOptions"))
537513

538514
# "create" domain data
539-
store.opensearch_domains[domain_name] = get_domain_status(domain_key)
515+
store.opensearch_domains[domain_name] = get_domain_status(domain_key, request=request)
540516
if domain_endpoint_options:
541517
store.opensearch_domains[domain_name]["DomainEndpointOptions"] = (
542518
DEFAULT_OPENSEARCH_DOMAIN_ENDPOINT_OPTIONS | domain_endpoint_options
543519
)
544520

545521
# lazy-init the cluster (sets the Endpoint and Processing flag of the domain status)
546522
# TODO handle additional parameters (cluster config,...)
547-
create_cluster(domain_key, engine_version, domain_endpoint_options, security_options)
523+
create_cluster(
524+
domain_key, request.get("EngineVersion"), domain_endpoint_options, security_options
525+
)
548526

549527
# set the tags
550-
self.add_tags(context, domain_key.arn, tag_list)
528+
self.add_tags(context, domain_key.arn, request.get("TagList"))
551529

552530
# get the (updated) status
553531
status = get_domain_status(domain_key)

tests/aws/services/opensearch/test_opensearch.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,15 +157,13 @@ def test_get_compatible_version_for_domain(self, opensearch_create_domain, aws_c
157157
"$..ClusterConfig..DedicatedMasterCount",
158158
"$..ClusterConfig..DedicatedMasterEnabled",
159159
"$..ClusterConfig..DedicatedMasterType",
160-
"$..ClusterConfig..InstanceType",
161160
"$..ClusterConfig..MultiAZWithStandbyEnabled",
162161
"$..ClusterConfig.Options.ColdStorageOptions",
163162
"$..ClusterConfig.Options.WarmEnabled",
164163
"$..ClusterConfig.Status.UpdateVersion",
165164
"$..CognitoOptions.Status.UpdateVersion",
166165
"$..DomainEndpointOptions..TLSSecurityPolicy",
167166
"$..DomainEndpointOptions.Status.UpdateVersion",
168-
"$..EBSOptions.Iops",
169167
"$..EBSOptions.Options.VolumeSize",
170168
"$..EBSOptions.Status.UpdateVersion",
171169
"$..EncryptionAtRestOptions.Status.UpdateVersion",

0 commit comments

Comments
 (0)