diff --git a/ambassador/ambassador/envoy/v2/v2route.py b/ambassador/ambassador/envoy/v2/v2route.py index e6df9b8dd6..7e934c66e9 100644 --- a/ambassador/ambassador/envoy/v2/v2route.py +++ b/ambassador/ambassador/envoy/v2/v2route.py @@ -109,6 +109,11 @@ def __init__(self, config: 'V2Config', group: IRHTTPMappingGroup) -> None: } } + idle_timeout_ms = group.get('idle_timeout_ms', None) + + if idle_timeout_ms is not None: + route['idle_timeout'] = "%0.3fs" % (idle_timeout_ms / 1000.0) + if group.get('rewrite', None): route['prefix_rewrite'] = group['rewrite'] diff --git a/ambassador/ambassador/ir/irhttpmapping.py b/ambassador/ambassador/ir/irhttpmapping.py index 5b5c4a595c..0f94628688 100644 --- a/ambassador/ambassador/ir/irhttpmapping.py +++ b/ambassador/ambassador/ir/irhttpmapping.py @@ -83,6 +83,7 @@ class IRHTTPMapping (IRBaseMapping): "shadow": True, "cluster_timeout_ms": True, "timeout_ms": True, + "idle_timeout_ms": True, "tls": True, "use_websocket": True, "weight": True, diff --git a/ambassador/ambassador/ir/irhttpmappinggroup.py b/ambassador/ambassador/ir/irhttpmappinggroup.py index 9114bd5042..6363e60b8e 100644 --- a/ambassador/ambassador/ir/irhttpmappinggroup.py +++ b/ambassador/ambassador/ir/irhttpmappinggroup.py @@ -41,6 +41,7 @@ class IRHTTPMappingGroup (IRBaseMappingGroup): 'rewrite': True, 'cluster_timeout_ms': True, 'timeout_ms': True, + 'idle_timeout_ms': True, 'bypass_auth': True, 'load_balancer': True } @@ -331,5 +332,5 @@ def finalize(self, ir: 'IR', aconf: Config) -> List[IRCluster]: # Flatten the case_sensitive field for host_redirect if it exists if 'case_sensitive' in redir: self['case_sensitive'] = redir['case_sensitive'] - + return [] diff --git a/ambassador/schemas/v1/Mapping.schema b/ambassador/schemas/v1/Mapping.schema index a804da2364..fb925c79c9 100644 --- a/ambassador/schemas/v1/Mapping.schema +++ b/ambassador/schemas/v1/Mapping.schema @@ -75,6 +75,7 @@ "shadow": { "type": "boolean" }, "cluster_timeout_ms": { "type": "integer" }, "timeout_ms": { "type": "integer" }, + "idle_timeout_ms": { "type": "integer" }, "tls": { "type": [ "string", "boolean" ] }, "use_websocket": { "type": "boolean" }, "weight": { "type": "integer" },