Route53: Implement GetHealthCheckStatus (#6460)
This commit is contained in:
parent
4f091efcce
commit
db002cb958
@ -5776,7 +5776,7 @@
|
|||||||
- [X] get_health_check
|
- [X] get_health_check
|
||||||
- [ ] get_health_check_count
|
- [ ] get_health_check_count
|
||||||
- [ ] get_health_check_last_failure_reason
|
- [ ] get_health_check_last_failure_reason
|
||||||
- [ ] get_health_check_status
|
- [X] get_health_check_status
|
||||||
- [X] get_hosted_zone
|
- [X] get_hosted_zone
|
||||||
- [X] get_hosted_zone_count
|
- [X] get_hosted_zone_count
|
||||||
- [ ] get_hosted_zone_limit
|
- [ ] get_hosted_zone_limit
|
||||||
@ -7444,4 +7444,4 @@
|
|||||||
- workspaces
|
- workspaces
|
||||||
- workspaces-web
|
- workspaces-web
|
||||||
- xray
|
- xray
|
||||||
</details>
|
</details>
|
||||||
|
@ -65,7 +65,7 @@ route53
|
|||||||
- [X] get_health_check
|
- [X] get_health_check
|
||||||
- [ ] get_health_check_count
|
- [ ] get_health_check_count
|
||||||
- [ ] get_health_check_last_failure_reason
|
- [ ] get_health_check_last_failure_reason
|
||||||
- [ ] get_health_check_status
|
- [X] get_health_check_status
|
||||||
- [X] get_hosted_zone
|
- [X] get_hosted_zone
|
||||||
- [X] get_hosted_zone_count
|
- [X] get_hosted_zone_count
|
||||||
- [ ] get_hosted_zone_limit
|
- [ ] get_hosted_zone_limit
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
"""Handles Route53 API requests, invokes method and returns response."""
|
"""Handles Route53 API requests, invokes method and returns response."""
|
||||||
|
import datetime
|
||||||
|
import re
|
||||||
from urllib.parse import parse_qs, urlparse
|
from urllib.parse import parse_qs, urlparse
|
||||||
|
|
||||||
from jinja2 import Template
|
from jinja2 import Template
|
||||||
@ -7,6 +9,7 @@ import xmltodict
|
|||||||
|
|
||||||
from moto.core.common_types import TYPE_RESPONSE
|
from moto.core.common_types import TYPE_RESPONSE
|
||||||
from moto.core.responses import BaseResponse
|
from moto.core.responses import BaseResponse
|
||||||
|
from moto.core.utils import iso_8601_datetime_with_milliseconds
|
||||||
from moto.route53.exceptions import InvalidChangeBatch
|
from moto.route53.exceptions import InvalidChangeBatch
|
||||||
from moto.route53.models import route53_backends, Route53Backend
|
from moto.route53.models import route53_backends, Route53Backend
|
||||||
|
|
||||||
@ -342,6 +345,31 @@ class Route53(BaseResponse):
|
|||||||
template = Template(UPDATE_HEALTH_CHECK_RESPONSE)
|
template = Template(UPDATE_HEALTH_CHECK_RESPONSE)
|
||||||
return 200, headers, template.render(health_check=health_check)
|
return 200, headers, template.render(health_check=health_check)
|
||||||
|
|
||||||
|
def health_check_status_response(self, request: Any, full_url: str, headers: Any) -> TYPE_RESPONSE: # type: ignore[return]
|
||||||
|
self.setup_class(request, full_url, headers)
|
||||||
|
|
||||||
|
parsed_url = urlparse(full_url)
|
||||||
|
method = request.method
|
||||||
|
|
||||||
|
health_check_id = re.search(
|
||||||
|
r"healthcheck/(?P<health_check_id>[^/]+)/status$", parsed_url.path
|
||||||
|
).group( # type: ignore[union-attr]
|
||||||
|
"health_check_id"
|
||||||
|
)
|
||||||
|
|
||||||
|
if method == "GET":
|
||||||
|
self.backend.get_health_check(health_check_id)
|
||||||
|
template = Template(GET_HEALTH_CHECK_STATUS_RESPONSE)
|
||||||
|
return (
|
||||||
|
200,
|
||||||
|
headers,
|
||||||
|
template.render(
|
||||||
|
timestamp=iso_8601_datetime_with_milliseconds(
|
||||||
|
datetime.datetime.utcnow()
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
def not_implemented_response(
|
def not_implemented_response(
|
||||||
self, request: Any, full_url: str, headers: Any
|
self, request: Any, full_url: str, headers: Any
|
||||||
) -> TYPE_RESPONSE:
|
) -> TYPE_RESPONSE:
|
||||||
@ -846,6 +874,21 @@ GET_HEALTH_CHECK_RESPONSE = """<?xml version="1.0"?>
|
|||||||
</GetHealthCheckResponse>
|
</GetHealthCheckResponse>
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
GET_HEALTH_CHECK_STATUS_RESPONSE = """<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<GetHealthCheckStatusResponse>
|
||||||
|
<HealthCheckObservations>
|
||||||
|
<HealthCheckObservation>
|
||||||
|
<IPAddress>127.0.13.37</IPAddress>
|
||||||
|
<Region>us-east-1</Region>
|
||||||
|
<StatusReport>
|
||||||
|
<CheckedTime>{{ timestamp }}</CheckedTime>
|
||||||
|
<Status>Success: HTTP Status Code: 200. Resolved IP: 127.0.13.37. OK</Status>
|
||||||
|
</StatusReport>
|
||||||
|
</HealthCheckObservation>
|
||||||
|
</HealthCheckObservations>
|
||||||
|
</GetHealthCheckStatusResponse>
|
||||||
|
"""
|
||||||
|
|
||||||
UPDATE_HOSTED_ZONE_COMMENT_RESPONSE = """<?xml version="1.0" encoding="UTF-8"?>
|
UPDATE_HOSTED_ZONE_COMMENT_RESPONSE = """<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<UpdateHostedZoneCommentResponse>
|
<UpdateHostedZoneCommentResponse>
|
||||||
<HostedZone>
|
<HostedZone>
|
||||||
|
@ -32,6 +32,7 @@ url_paths = {
|
|||||||
r"{0}/(?P<api_version>[\d_-]+)/hostedzonecount": Route53().get_hosted_zone_count_response,
|
r"{0}/(?P<api_version>[\d_-]+)/hostedzonecount": Route53().get_hosted_zone_count_response,
|
||||||
r"{0}/(?P<api_version>[\d_-]+)/healthcheck$": Route53().health_check_response1,
|
r"{0}/(?P<api_version>[\d_-]+)/healthcheck$": Route53().health_check_response1,
|
||||||
r"{0}/(?P<api_version>[\d_-]+)/healthcheck/(?P<health_check_id>[^/]+)$": Route53().health_check_response2,
|
r"{0}/(?P<api_version>[\d_-]+)/healthcheck/(?P<health_check_id>[^/]+)$": Route53().health_check_response2,
|
||||||
|
r"{0}/(?P<api_version>[\d_-]+)/healthcheck/(?P<health_check_id>[^/]+)/status$": Route53().health_check_status_response,
|
||||||
r"{0}/(?P<api_version>[\d_-]+)/tags/healthcheck/(?P<zone_id>[^/]+)$": tag_response1,
|
r"{0}/(?P<api_version>[\d_-]+)/tags/healthcheck/(?P<zone_id>[^/]+)$": tag_response1,
|
||||||
r"{0}/(?P<api_version>[\d_-]+)/tags/hostedzone/(?P<zone_id>[^/]+)$": tag_response2,
|
r"{0}/(?P<api_version>[\d_-]+)/tags/hostedzone/(?P<zone_id>[^/]+)$": tag_response2,
|
||||||
r"{0}/(?P<api_version>[\d_-]+)/trafficpolicyinstances/*": Route53().not_implemented_response,
|
r"{0}/(?P<api_version>[\d_-]+)/trafficpolicyinstances/*": Route53().not_implemented_response,
|
||||||
|
@ -296,3 +296,36 @@ def test_update_health_check():
|
|||||||
config.should.have.key("Disabled").equals(False)
|
config.should.have.key("Disabled").equals(False)
|
||||||
config.should.have.key("ChildHealthChecks").equals(["child"])
|
config.should.have.key("ChildHealthChecks").equals(["child"])
|
||||||
config.should.have.key("Regions").equals(["us-east-1", "us-east-2", "us-west-1"])
|
config.should.have.key("Regions").equals(["us-east-1", "us-east-2", "us-west-1"])
|
||||||
|
|
||||||
|
|
||||||
|
@mock_route53
|
||||||
|
def test_health_check_status():
|
||||||
|
client = boto3.client("route53", region_name="us-east-1")
|
||||||
|
|
||||||
|
hc_id = client.create_health_check(
|
||||||
|
CallerReference="callref",
|
||||||
|
HealthCheckConfig={
|
||||||
|
"Type": "CALCULATED",
|
||||||
|
"Inverted": False,
|
||||||
|
"Disabled": False,
|
||||||
|
"HealthThreshold": 1,
|
||||||
|
},
|
||||||
|
)["HealthCheck"]["Id"]
|
||||||
|
|
||||||
|
resp = client.get_health_check_status(HealthCheckId=hc_id)
|
||||||
|
resp["HealthCheckObservations"].should.have.length_of(1)
|
||||||
|
|
||||||
|
observation = resp["HealthCheckObservations"][0]
|
||||||
|
observation.should.have.key("Region").being.equals("us-east-1")
|
||||||
|
observation.should.have.key("IPAddress").being.equals("127.0.13.37")
|
||||||
|
observation.should.have.key("StatusReport")
|
||||||
|
observation["StatusReport"].should.have.key("Status").being.equals(
|
||||||
|
"Success: HTTP Status Code: 200. Resolved IP: 127.0.13.37. OK"
|
||||||
|
)
|
||||||
|
|
||||||
|
with pytest.raises(ClientError) as exc:
|
||||||
|
client.get_health_check_status(HealthCheckId="bad-id")
|
||||||
|
|
||||||
|
err = exc.value.response["Error"]
|
||||||
|
err["Code"].should.equal("NoSuchHealthCheck")
|
||||||
|
err["Message"].should.equal("A health check with id bad-id does not exist.")
|
||||||
|
Loading…
Reference in New Issue
Block a user