CreateGatewayRoute

enum_DefaultGatewayRouteRewrite := [ "ENABLED", "DISABLED" ]
enum_HttpMethod := [ "GET", "HEAD", "POST", "PUT", "DELETE", "CONNECT", "OPTIONS", "TRACE", "PATCH" ]

valid {
    input.Body.clientToken == STRING
    input.Body.gatewayRouteName == STRING
    input.Body.spec.grpcRoute.action.rewrite.hostname.defaultTargetHostname == enum_DefaultGatewayRouteRewrite[_]
    input.Body.spec.grpcRoute.action.target.port == INTEGER
    input.Body.spec.grpcRoute.action.target.virtualService.virtualServiceName == STRING
    input.Body.spec.grpcRoute.match.hostname.exact == STRING
    input.Body.spec.grpcRoute.match.hostname.suffix == STRING
    input.Body.spec.grpcRoute.match.metadata[_].invert == BOOLEAN
    input.Body.spec.grpcRoute.match.metadata[_].match.exact == STRING
    input.Body.spec.grpcRoute.match.metadata[_].match.prefix == STRING
    input.Body.spec.grpcRoute.match.metadata[_].match.range.end == LONG
    input.Body.spec.grpcRoute.match.metadata[_].match.range.start == LONG
    input.Body.spec.grpcRoute.match.metadata[_].match.regex == STRING
    input.Body.spec.grpcRoute.match.metadata[_].match.suffix == STRING
    input.Body.spec.grpcRoute.match.metadata[_].name == STRING
    input.Body.spec.grpcRoute.match.port == INTEGER
    input.Body.spec.grpcRoute.match.serviceName == STRING
    input.Body.spec.http2Route.action.rewrite.hostname.defaultTargetHostname == enum_DefaultGatewayRouteRewrite[_]
    input.Body.spec.http2Route.action.rewrite.path.exact == STRING
    input.Body.spec.http2Route.action.rewrite.prefix.defaultPrefix == enum_DefaultGatewayRouteRewrite[_]
    input.Body.spec.http2Route.action.rewrite.prefix.value == STRING
    input.Body.spec.http2Route.action.target.port == INTEGER
    input.Body.spec.http2Route.action.target.virtualService.virtualServiceName == STRING
    input.Body.spec.http2Route.match.headers[_].invert == BOOLEAN
    input.Body.spec.http2Route.match.headers[_].match.exact == STRING
    input.Body.spec.http2Route.match.headers[_].match.prefix == STRING
    input.Body.spec.http2Route.match.headers[_].match.range.end == LONG
    input.Body.spec.http2Route.match.headers[_].match.range.start == LONG
    input.Body.spec.http2Route.match.headers[_].match.regex == STRING
    input.Body.spec.http2Route.match.headers[_].match.suffix == STRING
    input.Body.spec.http2Route.match.headers[_].name == STRING
    input.Body.spec.http2Route.match.hostname.exact == STRING
    input.Body.spec.http2Route.match.hostname.suffix == STRING
    input.Body.spec.http2Route.match.method == enum_HttpMethod[_]
    input.Body.spec.http2Route.match.path.exact == STRING
    input.Body.spec.http2Route.match.path.regex == STRING
    input.Body.spec.http2Route.match.port == INTEGER
    input.Body.spec.http2Route.match.prefix == STRING
    input.Body.spec.http2Route.match.queryParameters[_].match.exact == STRING
    input.Body.spec.http2Route.match.queryParameters[_].name == STRING
    input.Body.spec.httpRoute.action.rewrite.hostname.defaultTargetHostname == enum_DefaultGatewayRouteRewrite[_]
    input.Body.spec.httpRoute.action.rewrite.path.exact == STRING
    input.Body.spec.httpRoute.action.rewrite.prefix.defaultPrefix == enum_DefaultGatewayRouteRewrite[_]
    input.Body.spec.httpRoute.action.rewrite.prefix.value == STRING
    input.Body.spec.httpRoute.action.target.port == INTEGER
    input.Body.spec.httpRoute.action.target.virtualService.virtualServiceName == STRING
    input.Body.spec.httpRoute.match.headers[_].invert == BOOLEAN
    input.Body.spec.httpRoute.match.headers[_].match.exact == STRING
    input.Body.spec.httpRoute.match.headers[_].match.prefix == STRING
    input.Body.spec.httpRoute.match.headers[_].match.range.end == LONG
    input.Body.spec.httpRoute.match.headers[_].match.range.start == LONG
    input.Body.spec.httpRoute.match.headers[_].match.regex == STRING
    input.Body.spec.httpRoute.match.headers[_].match.suffix == STRING
    input.Body.spec.httpRoute.match.headers[_].name == STRING
    input.Body.spec.httpRoute.match.hostname.exact == STRING
    input.Body.spec.httpRoute.match.hostname.suffix == STRING
    input.Body.spec.httpRoute.match.method == enum_HttpMethod[_]
    input.Body.spec.httpRoute.match.path.exact == STRING
    input.Body.spec.httpRoute.match.path.regex == STRING
    input.Body.spec.httpRoute.match.port == INTEGER
    input.Body.spec.httpRoute.match.prefix == STRING
    input.Body.spec.httpRoute.match.queryParameters[_].match.exact == STRING
    input.Body.spec.httpRoute.match.queryParameters[_].name == STRING
    input.Body.spec.priority == INTEGER
    input.Body.tags[_].key == STRING
    input.Body.tags[_].value == STRING
    input.ReqMap.meshName == STRING
    input.ReqMap.virtualGatewayName == STRING
    input.Qs.meshOwner == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

CreateMesh

enum_EgressFilterType := [ "ALLOW_ALL", "DROP_ALL" ]
enum_IpPreference := [ "IPv6_PREFERRED", "IPv4_PREFERRED", "IPv4_ONLY", "IPv6_ONLY" ]

valid {
    input.Body.clientToken == STRING
    input.Body.meshName == STRING
    input.Body.spec.egressFilter.type == enum_EgressFilterType[_]
    input.Body.spec.serviceDiscovery.ipPreference == enum_IpPreference[_]
    input.Body.tags[_].key == STRING
    input.Body.tags[_].value == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

CreateRoute

enum_DurationUnit := [ "s", "ms" ]
enum_GrpcRetryPolicyEvent := [ "cancelled", "deadline-exceeded", "internal", "resource-exhausted", "unavailable" ]
enum_HttpMethod := [ "GET", "HEAD", "POST", "PUT", "DELETE", "CONNECT", "OPTIONS", "TRACE", "PATCH" ]
enum_HttpScheme := [ "http", "https" ]
enum_TcpRetryPolicyEvent := [ "connection-error" ]

valid {
    input.Body.clientToken == STRING
    input.Body.routeName == STRING
    input.Body.spec.grpcRoute.action.weightedTargets[_].port == INTEGER
    input.Body.spec.grpcRoute.action.weightedTargets[_].virtualNode == STRING
    input.Body.spec.grpcRoute.action.weightedTargets[_].weight == INTEGER
    input.Body.spec.grpcRoute.match.metadata[_].invert == BOOLEAN
    input.Body.spec.grpcRoute.match.metadata[_].match.exact == STRING
    input.Body.spec.grpcRoute.match.metadata[_].match.prefix == STRING
    input.Body.spec.grpcRoute.match.metadata[_].match.range.end == LONG
    input.Body.spec.grpcRoute.match.metadata[_].match.range.start == LONG
    input.Body.spec.grpcRoute.match.metadata[_].match.regex == STRING
    input.Body.spec.grpcRoute.match.metadata[_].match.suffix == STRING
    input.Body.spec.grpcRoute.match.metadata[_].name == STRING
    input.Body.spec.grpcRoute.match.methodName == STRING
    input.Body.spec.grpcRoute.match.port == INTEGER
    input.Body.spec.grpcRoute.match.serviceName == STRING
    input.Body.spec.grpcRoute.retryPolicy.grpcRetryEvents[_] == enum_GrpcRetryPolicyEvent[_]
    input.Body.spec.grpcRoute.retryPolicy.httpRetryEvents[_] == STRING
    input.Body.spec.grpcRoute.retryPolicy.maxRetries == LONG
    input.Body.spec.grpcRoute.retryPolicy.perRetryTimeout.unit == enum_DurationUnit[_]
    input.Body.spec.grpcRoute.retryPolicy.perRetryTimeout.value == LONG
    input.Body.spec.grpcRoute.retryPolicy.tcpRetryEvents[_] == enum_TcpRetryPolicyEvent[_]
    input.Body.spec.grpcRoute.timeout.idle.unit == enum_DurationUnit[_]
    input.Body.spec.grpcRoute.timeout.idle.value == LONG
    input.Body.spec.grpcRoute.timeout.perRequest.unit == enum_DurationUnit[_]
    input.Body.spec.grpcRoute.timeout.perRequest.value == LONG
    input.Body.spec.http2Route.action.weightedTargets[_].port == INTEGER
    input.Body.spec.http2Route.action.weightedTargets[_].virtualNode == STRING
    input.Body.spec.http2Route.action.weightedTargets[_].weight == INTEGER
    input.Body.spec.http2Route.match.headers[_].invert == BOOLEAN
    input.Body.spec.http2Route.match.headers[_].match.exact == STRING
    input.Body.spec.http2Route.match.headers[_].match.prefix == STRING
    input.Body.spec.http2Route.match.headers[_].match.range.end == LONG
    input.Body.spec.http2Route.match.headers[_].match.range.start == LONG
    input.Body.spec.http2Route.match.headers[_].match.regex == STRING
    input.Body.spec.http2Route.match.headers[_].match.suffix == STRING
    input.Body.spec.http2Route.match.headers[_].name == STRING
    input.Body.spec.http2Route.match.method == enum_HttpMethod[_]
    input.Body.spec.http2Route.match.path.exact == STRING
    input.Body.spec.http2Route.match.path.regex == STRING
    input.Body.spec.http2Route.match.port == INTEGER
    input.Body.spec.http2Route.match.prefix == STRING
    input.Body.spec.http2Route.match.queryParameters[_].match.exact == STRING
    input.Body.spec.http2Route.match.queryParameters[_].name == STRING
    input.Body.spec.http2Route.match.scheme == enum_HttpScheme[_]
    input.Body.spec.http2Route.retryPolicy.httpRetryEvents[_] == STRING
    input.Body.spec.http2Route.retryPolicy.maxRetries == LONG
    input.Body.spec.http2Route.retryPolicy.perRetryTimeout.unit == enum_DurationUnit[_]
    input.Body.spec.http2Route.retryPolicy.perRetryTimeout.value == LONG
    input.Body.spec.http2Route.retryPolicy.tcpRetryEvents[_] == enum_TcpRetryPolicyEvent[_]
    input.Body.spec.http2Route.timeout.idle.unit == enum_DurationUnit[_]
    input.Body.spec.http2Route.timeout.idle.value == LONG
    input.Body.spec.http2Route.timeout.perRequest.unit == enum_DurationUnit[_]
    input.Body.spec.http2Route.timeout.perRequest.value == LONG
    input.Body.spec.httpRoute.action.weightedTargets[_].port == INTEGER
    input.Body.spec.httpRoute.action.weightedTargets[_].virtualNode == STRING
    input.Body.spec.httpRoute.action.weightedTargets[_].weight == INTEGER
    input.Body.spec.httpRoute.match.headers[_].invert == BOOLEAN
    input.Body.spec.httpRoute.match.headers[_].match.exact == STRING
    input.Body.spec.httpRoute.match.headers[_].match.prefix == STRING
    input.Body.spec.httpRoute.match.headers[_].match.range.end == LONG
    input.Body.spec.httpRoute.match.headers[_].match.range.start == LONG
    input.Body.spec.httpRoute.match.headers[_].match.regex == STRING
    input.Body.spec.httpRoute.match.headers[_].match.suffix == STRING
    input.Body.spec.httpRoute.match.headers[_].name == STRING
    input.Body.spec.httpRoute.match.method == enum_HttpMethod[_]
    input.Body.spec.httpRoute.match.path.exact == STRING
    input.Body.spec.httpRoute.match.path.regex == STRING
    input.Body.spec.httpRoute.match.port == INTEGER
    input.Body.spec.httpRoute.match.prefix == STRING
    input.Body.spec.httpRoute.match.queryParameters[_].match.exact == STRING
    input.Body.spec.httpRoute.match.queryParameters[_].name == STRING
    input.Body.spec.httpRoute.match.scheme == enum_HttpScheme[_]
    input.Body.spec.httpRoute.retryPolicy.httpRetryEvents[_] == STRING
    input.Body.spec.httpRoute.retryPolicy.maxRetries == LONG
    input.Body.spec.httpRoute.retryPolicy.perRetryTimeout.unit == enum_DurationUnit[_]
    input.Body.spec.httpRoute.retryPolicy.perRetryTimeout.value == LONG
    input.Body.spec.httpRoute.retryPolicy.tcpRetryEvents[_] == enum_TcpRetryPolicyEvent[_]
    input.Body.spec.httpRoute.timeout.idle.unit == enum_DurationUnit[_]
    input.Body.spec.httpRoute.timeout.idle.value == LONG
    input.Body.spec.httpRoute.timeout.perRequest.unit == enum_DurationUnit[_]
    input.Body.spec.httpRoute.timeout.perRequest.value == LONG
    input.Body.spec.priority == INTEGER
    input.Body.spec.tcpRoute.action.weightedTargets[_].port == INTEGER
    input.Body.spec.tcpRoute.action.weightedTargets[_].virtualNode == STRING
    input.Body.spec.tcpRoute.action.weightedTargets[_].weight == INTEGER
    input.Body.spec.tcpRoute.match.port == INTEGER
    input.Body.spec.tcpRoute.timeout.idle.unit == enum_DurationUnit[_]
    input.Body.spec.tcpRoute.timeout.idle.value == LONG
    input.Body.tags[_].key == STRING
    input.Body.tags[_].value == STRING
    input.ReqMap.meshName == STRING
    input.ReqMap.virtualRouterName == STRING
    input.Qs.meshOwner == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

CreateVirtualGateway

enum_VirtualGatewayListenerTlsMode := [ "STRICT", "PERMISSIVE", "DISABLED" ]
enum_VirtualGatewayPortProtocol := [ "http", "http2", "grpc" ]

valid {
    input.Body.clientToken == STRING
    input.Body.spec.backendDefaults.clientPolicy.tls.certificate.file.certificateChain == STRING
    input.Body.spec.backendDefaults.clientPolicy.tls.certificate.file.privateKey == STRING
    input.Body.spec.backendDefaults.clientPolicy.tls.certificate.sds.secretName == STRING
    input.Body.spec.backendDefaults.clientPolicy.tls.enforce == BOOLEAN
    input.Body.spec.backendDefaults.clientPolicy.tls.ports[_] == INTEGER
    input.Body.spec.backendDefaults.clientPolicy.tls.validation.subjectAlternativeNames.match.exact[_] == STRING
    input.Body.spec.backendDefaults.clientPolicy.tls.validation.trust.acm.certificateAuthorityArns[_] == STRING
    input.Body.spec.backendDefaults.clientPolicy.tls.validation.trust.file.certificateChain == STRING
    input.Body.spec.backendDefaults.clientPolicy.tls.validation.trust.sds.secretName == STRING
    input.Body.spec.listeners[_].connectionPool.grpc.maxRequests == INTEGER
    input.Body.spec.listeners[_].connectionPool.http.maxConnections == INTEGER
    input.Body.spec.listeners[_].connectionPool.http.maxPendingRequests == INTEGER
    input.Body.spec.listeners[_].connectionPool.http2.maxRequests == INTEGER
    input.Body.spec.listeners[_].healthCheck.healthyThreshold == INTEGER
    input.Body.spec.listeners[_].healthCheck.intervalMillis == LONG
    input.Body.spec.listeners[_].healthCheck.path == STRING
    input.Body.spec.listeners[_].healthCheck.port == INTEGER
    input.Body.spec.listeners[_].healthCheck.protocol == enum_VirtualGatewayPortProtocol[_]
    input.Body.spec.listeners[_].healthCheck.timeoutMillis == LONG
    input.Body.spec.listeners[_].healthCheck.unhealthyThreshold == INTEGER
    input.Body.spec.listeners[_].portMapping.port == INTEGER
    input.Body.spec.listeners[_].portMapping.protocol == enum_VirtualGatewayPortProtocol[_]
    input.Body.spec.listeners[_].tls.certificate.acm.certificateArn == STRING
    input.Body.spec.listeners[_].tls.certificate.file.certificateChain == STRING
    input.Body.spec.listeners[_].tls.certificate.file.privateKey == STRING
    input.Body.spec.listeners[_].tls.certificate.sds.secretName == STRING
    input.Body.spec.listeners[_].tls.mode == enum_VirtualGatewayListenerTlsMode[_]
    input.Body.spec.listeners[_].tls.validation.subjectAlternativeNames.match.exact[_] == STRING
    input.Body.spec.listeners[_].tls.validation.trust.file.certificateChain == STRING
    input.Body.spec.listeners[_].tls.validation.trust.sds.secretName == STRING
    input.Body.spec.logging.accessLog.file.format.json[_].key == STRING
    input.Body.spec.logging.accessLog.file.format.json[_].value == STRING
    input.Body.spec.logging.accessLog.file.format.text == STRING
    input.Body.spec.logging.accessLog.file.path == STRING
    input.Body.tags[_].key == STRING
    input.Body.tags[_].value == STRING
    input.Body.virtualGatewayName == STRING
    input.ReqMap.meshName == STRING
    input.Qs.meshOwner == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

CreateVirtualNode

enum_DnsResponseType := [ "LOADBALANCER", "ENDPOINTS" ]
enum_DurationUnit := [ "s", "ms" ]
enum_IpPreference := [ "IPv6_PREFERRED", "IPv4_PREFERRED", "IPv4_ONLY", "IPv6_ONLY" ]
enum_ListenerTlsMode := [ "STRICT", "PERMISSIVE", "DISABLED" ]
enum_PortProtocol := [ "http", "tcp", "http2", "grpc" ]

valid {
    input.Body.clientToken == STRING
    input.Body.spec.backendDefaults.clientPolicy.tls.certificate.file.certificateChain == STRING
    input.Body.spec.backendDefaults.clientPolicy.tls.certificate.file.privateKey == STRING
    input.Body.spec.backendDefaults.clientPolicy.tls.certificate.sds.secretName == STRING
    input.Body.spec.backendDefaults.clientPolicy.tls.enforce == BOOLEAN
    input.Body.spec.backendDefaults.clientPolicy.tls.ports[_] == INTEGER
    input.Body.spec.backendDefaults.clientPolicy.tls.validation.subjectAlternativeNames.match.exact[_] == STRING
    input.Body.spec.backendDefaults.clientPolicy.tls.validation.trust.acm.certificateAuthorityArns[_] == STRING
    input.Body.spec.backendDefaults.clientPolicy.tls.validation.trust.file.certificateChain == STRING
    input.Body.spec.backendDefaults.clientPolicy.tls.validation.trust.sds.secretName == STRING
    input.Body.spec.backends[_].virtualService.clientPolicy.tls.certificate.file.certificateChain == STRING
    input.Body.spec.backends[_].virtualService.clientPolicy.tls.certificate.file.privateKey == STRING
    input.Body.spec.backends[_].virtualService.clientPolicy.tls.certificate.sds.secretName == STRING
    input.Body.spec.backends[_].virtualService.clientPolicy.tls.enforce == BOOLEAN
    input.Body.spec.backends[_].virtualService.clientPolicy.tls.ports[_] == INTEGER
    input.Body.spec.backends[_].virtualService.clientPolicy.tls.validation.subjectAlternativeNames.match.exact[_] == STRING
    input.Body.spec.backends[_].virtualService.clientPolicy.tls.validation.trust.acm.certificateAuthorityArns[_] == STRING
    input.Body.spec.backends[_].virtualService.clientPolicy.tls.validation.trust.file.certificateChain == STRING
    input.Body.spec.backends[_].virtualService.clientPolicy.tls.validation.trust.sds.secretName == STRING
    input.Body.spec.backends[_].virtualService.virtualServiceName == STRING
    input.Body.spec.listeners[_].connectionPool.grpc.maxRequests == INTEGER
    input.Body.spec.listeners[_].connectionPool.http.maxConnections == INTEGER
    input.Body.spec.listeners[_].connectionPool.http.maxPendingRequests == INTEGER
    input.Body.spec.listeners[_].connectionPool.http2.maxRequests == INTEGER
    input.Body.spec.listeners[_].connectionPool.tcp.maxConnections == INTEGER
    input.Body.spec.listeners[_].healthCheck.healthyThreshold == INTEGER
    input.Body.spec.listeners[_].healthCheck.intervalMillis == LONG
    input.Body.spec.listeners[_].healthCheck.path == STRING
    input.Body.spec.listeners[_].healthCheck.port == INTEGER
    input.Body.spec.listeners[_].healthCheck.protocol == enum_PortProtocol[_]
    input.Body.spec.listeners[_].healthCheck.timeoutMillis == LONG
    input.Body.spec.listeners[_].healthCheck.unhealthyThreshold == INTEGER
    input.Body.spec.listeners[_].outlierDetection.baseEjectionDuration.unit == enum_DurationUnit[_]
    input.Body.spec.listeners[_].outlierDetection.baseEjectionDuration.value == LONG
    input.Body.spec.listeners[_].outlierDetection.interval.unit == enum_DurationUnit[_]
    input.Body.spec.listeners[_].outlierDetection.interval.value == LONG
    input.Body.spec.listeners[_].outlierDetection.maxEjectionPercent == INTEGER
    input.Body.spec.listeners[_].outlierDetection.maxServerErrors == LONG
    input.Body.spec.listeners[_].portMapping.port == INTEGER
    input.Body.spec.listeners[_].portMapping.protocol == enum_PortProtocol[_]
    input.Body.spec.listeners[_].timeout.grpc.idle.unit == enum_DurationUnit[_]
    input.Body.spec.listeners[_].timeout.grpc.idle.value == LONG
    input.Body.spec.listeners[_].timeout.grpc.perRequest.unit == enum_DurationUnit[_]
    input.Body.spec.listeners[_].timeout.grpc.perRequest.value == LONG
    input.Body.spec.listeners[_].timeout.http.idle.unit == enum_DurationUnit[_]
    input.Body.spec.listeners[_].timeout.http.idle.value == LONG
    input.Body.spec.listeners[_].timeout.http.perRequest.unit == enum_DurationUnit[_]
    input.Body.spec.listeners[_].timeout.http.perRequest.value == LONG
    input.Body.spec.listeners[_].timeout.http2.idle.unit == enum_DurationUnit[_]
    input.Body.spec.listeners[_].timeout.http2.idle.value == LONG
    input.Body.spec.listeners[_].timeout.http2.perRequest.unit == enum_DurationUnit[_]
    input.Body.spec.listeners[_].timeout.http2.perRequest.value == LONG
    input.Body.spec.listeners[_].timeout.tcp.idle.unit == enum_DurationUnit[_]
    input.Body.spec.listeners[_].timeout.tcp.idle.value == LONG
    input.Body.spec.listeners[_].tls.certificate.acm.certificateArn == STRING
    input.Body.spec.listeners[_].tls.certificate.file.certificateChain == STRING
    input.Body.spec.listeners[_].tls.certificate.file.privateKey == STRING
    input.Body.spec.listeners[_].tls.certificate.sds.secretName == STRING
    input.Body.spec.listeners[_].tls.mode == enum_ListenerTlsMode[_]
    input.Body.spec.listeners[_].tls.validation.subjectAlternativeNames.match.exact[_] == STRING
    input.Body.spec.listeners[_].tls.validation.trust.file.certificateChain == STRING
    input.Body.spec.listeners[_].tls.validation.trust.sds.secretName == STRING
    input.Body.spec.logging.accessLog.file.format.json[_].key == STRING
    input.Body.spec.logging.accessLog.file.format.json[_].value == STRING
    input.Body.spec.logging.accessLog.file.format.text == STRING
    input.Body.spec.logging.accessLog.file.path == STRING
    input.Body.spec.serviceDiscovery.awsCloudMap.attributes[_].key == STRING
    input.Body.spec.serviceDiscovery.awsCloudMap.attributes[_].value == STRING
    input.Body.spec.serviceDiscovery.awsCloudMap.ipPreference == enum_IpPreference[_]
    input.Body.spec.serviceDiscovery.awsCloudMap.namespaceName == STRING
    input.Body.spec.serviceDiscovery.awsCloudMap.serviceName == STRING
    input.Body.spec.serviceDiscovery.dns.hostname == STRING
    input.Body.spec.serviceDiscovery.dns.ipPreference == enum_IpPreference[_]
    input.Body.spec.serviceDiscovery.dns.responseType == enum_DnsResponseType[_]
    input.Body.tags[_].key == STRING
    input.Body.tags[_].value == STRING
    input.Body.virtualNodeName == STRING
    input.ReqMap.meshName == STRING
    input.Qs.meshOwner == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

CreateVirtualRouter

enum_PortProtocol := [ "http", "tcp", "http2", "grpc" ]

valid {
    input.Body.clientToken == STRING
    input.Body.spec.listeners[_].portMapping.port == INTEGER
    input.Body.spec.listeners[_].portMapping.protocol == enum_PortProtocol[_]
    input.Body.tags[_].key == STRING
    input.Body.tags[_].value == STRING
    input.Body.virtualRouterName == STRING
    input.ReqMap.meshName == STRING
    input.Qs.meshOwner == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

CreateVirtualService

valid {
    input.Body.clientToken == STRING
    input.Body.spec.provider.virtualNode.virtualNodeName == STRING
    input.Body.spec.provider.virtualRouter.virtualRouterName == STRING
    input.Body.tags[_].key == STRING
    input.Body.tags[_].value == STRING
    input.Body.virtualServiceName == STRING
    input.ReqMap.meshName == STRING
    input.Qs.meshOwner == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DeleteGatewayRoute

valid {
    input.ReqMap.gatewayRouteName == STRING
    input.ReqMap.meshName == STRING
    input.ReqMap.virtualGatewayName == STRING
    input.Qs.meshOwner == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DeleteMesh

valid {
    input.ReqMap.meshName == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DeleteRoute

valid {
    input.ReqMap.meshName == STRING
    input.ReqMap.routeName == STRING
    input.ReqMap.virtualRouterName == STRING
    input.Qs.meshOwner == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DeleteVirtualGateway

valid {
    input.ReqMap.meshName == STRING
    input.ReqMap.virtualGatewayName == STRING
    input.Qs.meshOwner == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DeleteVirtualNode

valid {
    input.ReqMap.meshName == STRING
    input.ReqMap.virtualNodeName == STRING
    input.Qs.meshOwner == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DeleteVirtualRouter

valid {
    input.ReqMap.meshName == STRING
    input.ReqMap.virtualRouterName == STRING
    input.Qs.meshOwner == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DeleteVirtualService

valid {
    input.ReqMap.meshName == STRING
    input.ReqMap.virtualServiceName == STRING
    input.Qs.meshOwner == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DescribeGatewayRoute

valid {
    input.ReqMap.gatewayRouteName == STRING
    input.ReqMap.meshName == STRING
    input.ReqMap.virtualGatewayName == STRING
    input.Qs.meshOwner == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DescribeMesh

valid {
    input.ReqMap.meshName == STRING
    input.Qs.meshOwner == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DescribeRoute

valid {
    input.ReqMap.meshName == STRING
    input.ReqMap.routeName == STRING
    input.ReqMap.virtualRouterName == STRING
    input.Qs.meshOwner == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DescribeVirtualGateway

valid {
    input.ReqMap.meshName == STRING
    input.ReqMap.virtualGatewayName == STRING
    input.Qs.meshOwner == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DescribeVirtualNode

valid {
    input.ReqMap.meshName == STRING
    input.ReqMap.virtualNodeName == STRING
    input.Qs.meshOwner == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DescribeVirtualRouter

valid {
    input.ReqMap.meshName == STRING
    input.ReqMap.virtualRouterName == STRING
    input.Qs.meshOwner == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DescribeVirtualService

valid {
    input.ReqMap.meshName == STRING
    input.ReqMap.virtualServiceName == STRING
    input.Qs.meshOwner == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

ListGatewayRoutes

valid {
    input.ReqMap.meshName == STRING
    input.ReqMap.virtualGatewayName == STRING
    input.Qs.limit == INTEGER
    input.Qs.meshOwner == STRING
    input.Qs.nextToken == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

ListMeshes

valid {
    input.Qs.limit == INTEGER
    input.Qs.nextToken == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

ListRoutes

valid {
    input.ReqMap.meshName == STRING
    input.ReqMap.virtualRouterName == STRING
    input.Qs.limit == INTEGER
    input.Qs.meshOwner == STRING
    input.Qs.nextToken == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

ListTagsForResource

valid {
    input.Qs.limit == INTEGER
    input.Qs.nextToken == STRING
    input.Qs.resourceArn == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

ListVirtualGateways

valid {
    input.ReqMap.meshName == STRING
    input.Qs.limit == INTEGER
    input.Qs.meshOwner == STRING
    input.Qs.nextToken == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

ListVirtualNodes

valid {
    input.ReqMap.meshName == STRING
    input.Qs.limit == INTEGER
    input.Qs.meshOwner == STRING
    input.Qs.nextToken == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

ListVirtualRouters

valid {
    input.ReqMap.meshName == STRING
    input.Qs.limit == INTEGER
    input.Qs.meshOwner == STRING
    input.Qs.nextToken == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

ListVirtualServices

valid {
    input.ReqMap.meshName == STRING
    input.Qs.limit == INTEGER
    input.Qs.meshOwner == STRING
    input.Qs.nextToken == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

TagResource

valid {
    input.Body.tags[_].key == STRING
    input.Body.tags[_].value == STRING
    input.Qs.resourceArn == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

UntagResource

valid {
    input.Body.tagKeys[_] == STRING
    input.Qs.resourceArn == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

UpdateGatewayRoute

enum_DefaultGatewayRouteRewrite := [ "ENABLED", "DISABLED" ]
enum_HttpMethod := [ "GET", "HEAD", "POST", "PUT", "DELETE", "CONNECT", "OPTIONS", "TRACE", "PATCH" ]

valid {
    input.Body.clientToken == STRING
    input.Body.spec.grpcRoute.action.rewrite.hostname.defaultTargetHostname == enum_DefaultGatewayRouteRewrite[_]
    input.Body.spec.grpcRoute.action.target.port == INTEGER
    input.Body.spec.grpcRoute.action.target.virtualService.virtualServiceName == STRING
    input.Body.spec.grpcRoute.match.hostname.exact == STRING
    input.Body.spec.grpcRoute.match.hostname.suffix == STRING
    input.Body.spec.grpcRoute.match.metadata[_].invert == BOOLEAN
    input.Body.spec.grpcRoute.match.metadata[_].match.exact == STRING
    input.Body.spec.grpcRoute.match.metadata[_].match.prefix == STRING
    input.Body.spec.grpcRoute.match.metadata[_].match.range.end == LONG
    input.Body.spec.grpcRoute.match.metadata[_].match.range.start == LONG
    input.Body.spec.grpcRoute.match.metadata[_].match.regex == STRING
    input.Body.spec.grpcRoute.match.metadata[_].match.suffix == STRING
    input.Body.spec.grpcRoute.match.metadata[_].name == STRING
    input.Body.spec.grpcRoute.match.port == INTEGER
    input.Body.spec.grpcRoute.match.serviceName == STRING
    input.Body.spec.http2Route.action.rewrite.hostname.defaultTargetHostname == enum_DefaultGatewayRouteRewrite[_]
    input.Body.spec.http2Route.action.rewrite.path.exact == STRING
    input.Body.spec.http2Route.action.rewrite.prefix.defaultPrefix == enum_DefaultGatewayRouteRewrite[_]
    input.Body.spec.http2Route.action.rewrite.prefix.value == STRING
    input.Body.spec.http2Route.action.target.port == INTEGER
    input.Body.spec.http2Route.action.target.virtualService.virtualServiceName == STRING
    input.Body.spec.http2Route.match.headers[_].invert == BOOLEAN
    input.Body.spec.http2Route.match.headers[_].match.exact == STRING
    input.Body.spec.http2Route.match.headers[_].match.prefix == STRING
    input.Body.spec.http2Route.match.headers[_].match.range.end == LONG
    input.Body.spec.http2Route.match.headers[_].match.range.start == LONG
    input.Body.spec.http2Route.match.headers[_].match.regex == STRING
    input.Body.spec.http2Route.match.headers[_].match.suffix == STRING
    input.Body.spec.http2Route.match.headers[_].name == STRING
    input.Body.spec.http2Route.match.hostname.exact == STRING
    input.Body.spec.http2Route.match.hostname.suffix == STRING
    input.Body.spec.http2Route.match.method == enum_HttpMethod[_]
    input.Body.spec.http2Route.match.path.exact == STRING
    input.Body.spec.http2Route.match.path.regex == STRING
    input.Body.spec.http2Route.match.port == INTEGER
    input.Body.spec.http2Route.match.prefix == STRING
    input.Body.spec.http2Route.match.queryParameters[_].match.exact == STRING
    input.Body.spec.http2Route.match.queryParameters[_].name == STRING
    input.Body.spec.httpRoute.action.rewrite.hostname.defaultTargetHostname == enum_DefaultGatewayRouteRewrite[_]
    input.Body.spec.httpRoute.action.rewrite.path.exact == STRING
    input.Body.spec.httpRoute.action.rewrite.prefix.defaultPrefix == enum_DefaultGatewayRouteRewrite[_]
    input.Body.spec.httpRoute.action.rewrite.prefix.value == STRING
    input.Body.spec.httpRoute.action.target.port == INTEGER
    input.Body.spec.httpRoute.action.target.virtualService.virtualServiceName == STRING
    input.Body.spec.httpRoute.match.headers[_].invert == BOOLEAN
    input.Body.spec.httpRoute.match.headers[_].match.exact == STRING
    input.Body.spec.httpRoute.match.headers[_].match.prefix == STRING
    input.Body.spec.httpRoute.match.headers[_].match.range.end == LONG
    input.Body.spec.httpRoute.match.headers[_].match.range.start == LONG
    input.Body.spec.httpRoute.match.headers[_].match.regex == STRING
    input.Body.spec.httpRoute.match.headers[_].match.suffix == STRING
    input.Body.spec.httpRoute.match.headers[_].name == STRING
    input.Body.spec.httpRoute.match.hostname.exact == STRING
    input.Body.spec.httpRoute.match.hostname.suffix == STRING
    input.Body.spec.httpRoute.match.method == enum_HttpMethod[_]
    input.Body.spec.httpRoute.match.path.exact == STRING
    input.Body.spec.httpRoute.match.path.regex == STRING
    input.Body.spec.httpRoute.match.port == INTEGER
    input.Body.spec.httpRoute.match.prefix == STRING
    input.Body.spec.httpRoute.match.queryParameters[_].match.exact == STRING
    input.Body.spec.httpRoute.match.queryParameters[_].name == STRING
    input.Body.spec.priority == INTEGER
    input.ReqMap.gatewayRouteName == STRING
    input.ReqMap.meshName == STRING
    input.ReqMap.virtualGatewayName == STRING
    input.Qs.meshOwner == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

UpdateMesh

enum_EgressFilterType := [ "ALLOW_ALL", "DROP_ALL" ]
enum_IpPreference := [ "IPv6_PREFERRED", "IPv4_PREFERRED", "IPv4_ONLY", "IPv6_ONLY" ]

valid {
    input.Body.clientToken == STRING
    input.Body.spec.egressFilter.type == enum_EgressFilterType[_]
    input.Body.spec.serviceDiscovery.ipPreference == enum_IpPreference[_]
    input.ReqMap.meshName == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

UpdateRoute

enum_DurationUnit := [ "s", "ms" ]
enum_GrpcRetryPolicyEvent := [ "cancelled", "deadline-exceeded", "internal", "resource-exhausted", "unavailable" ]
enum_HttpMethod := [ "GET", "HEAD", "POST", "PUT", "DELETE", "CONNECT", "OPTIONS", "TRACE", "PATCH" ]
enum_HttpScheme := [ "http", "https" ]
enum_TcpRetryPolicyEvent := [ "connection-error" ]

valid {
    input.Body.clientToken == STRING
    input.Body.spec.grpcRoute.action.weightedTargets[_].port == INTEGER
    input.Body.spec.grpcRoute.action.weightedTargets[_].virtualNode == STRING
    input.Body.spec.grpcRoute.action.weightedTargets[_].weight == INTEGER
    input.Body.spec.grpcRoute.match.metadata[_].invert == BOOLEAN
    input.Body.spec.grpcRoute.match.metadata[_].match.exact == STRING
    input.Body.spec.grpcRoute.match.metadata[_].match.prefix == STRING
    input.Body.spec.grpcRoute.match.metadata[_].match.range.end == LONG
    input.Body.spec.grpcRoute.match.metadata[_].match.range.start == LONG
    input.Body.spec.grpcRoute.match.metadata[_].match.regex == STRING
    input.Body.spec.grpcRoute.match.metadata[_].match.suffix == STRING
    input.Body.spec.grpcRoute.match.metadata[_].name == STRING
    input.Body.spec.grpcRoute.match.methodName == STRING
    input.Body.spec.grpcRoute.match.port == INTEGER
    input.Body.spec.grpcRoute.match.serviceName == STRING
    input.Body.spec.grpcRoute.retryPolicy.grpcRetryEvents[_] == enum_GrpcRetryPolicyEvent[_]
    input.Body.spec.grpcRoute.retryPolicy.httpRetryEvents[_] == STRING
    input.Body.spec.grpcRoute.retryPolicy.maxRetries == LONG
    input.Body.spec.grpcRoute.retryPolicy.perRetryTimeout.unit == enum_DurationUnit[_]
    input.Body.spec.grpcRoute.retryPolicy.perRetryTimeout.value == LONG
    input.Body.spec.grpcRoute.retryPolicy.tcpRetryEvents[_] == enum_TcpRetryPolicyEvent[_]
    input.Body.spec.grpcRoute.timeout.idle.unit == enum_DurationUnit[_]
    input.Body.spec.grpcRoute.timeout.idle.value == LONG
    input.Body.spec.grpcRoute.timeout.perRequest.unit == enum_DurationUnit[_]
    input.Body.spec.grpcRoute.timeout.perRequest.value == LONG
    input.Body.spec.http2Route.action.weightedTargets[_].port == INTEGER
    input.Body.spec.http2Route.action.weightedTargets[_].virtualNode == STRING
    input.Body.spec.http2Route.action.weightedTargets[_].weight == INTEGER
    input.Body.spec.http2Route.match.headers[_].invert == BOOLEAN
    input.Body.spec.http2Route.match.headers[_].match.exact == STRING
    input.Body.spec.http2Route.match.headers[_].match.prefix == STRING
    input.Body.spec.http2Route.match.headers[_].match.range.end == LONG
    input.Body.spec.http2Route.match.headers[_].match.range.start == LONG
    input.Body.spec.http2Route.match.headers[_].match.regex == STRING
    input.Body.spec.http2Route.match.headers[_].match.suffix == STRING
    input.Body.spec.http2Route.match.headers[_].name == STRING
    input.Body.spec.http2Route.match.method == enum_HttpMethod[_]
    input.Body.spec.http2Route.match.path.exact == STRING
    input.Body.spec.http2Route.match.path.regex == STRING
    input.Body.spec.http2Route.match.port == INTEGER
    input.Body.spec.http2Route.match.prefix == STRING
    input.Body.spec.http2Route.match.queryParameters[_].match.exact == STRING
    input.Body.spec.http2Route.match.queryParameters[_].name == STRING
    input.Body.spec.http2Route.match.scheme == enum_HttpScheme[_]
    input.Body.spec.http2Route.retryPolicy.httpRetryEvents[_] == STRING
    input.Body.spec.http2Route.retryPolicy.maxRetries == LONG
    input.Body.spec.http2Route.retryPolicy.perRetryTimeout.unit == enum_DurationUnit[_]
    input.Body.spec.http2Route.retryPolicy.perRetryTimeout.value == LONG
    input.Body.spec.http2Route.retryPolicy.tcpRetryEvents[_] == enum_TcpRetryPolicyEvent[_]
    input.Body.spec.http2Route.timeout.idle.unit == enum_DurationUnit[_]
    input.Body.spec.http2Route.timeout.idle.value == LONG
    input.Body.spec.http2Route.timeout.perRequest.unit == enum_DurationUnit[_]
    input.Body.spec.http2Route.timeout.perRequest.value == LONG
    input.Body.spec.httpRoute.action.weightedTargets[_].port == INTEGER
    input.Body.spec.httpRoute.action.weightedTargets[_].virtualNode == STRING
    input.Body.spec.httpRoute.action.weightedTargets[_].weight == INTEGER
    input.Body.spec.httpRoute.match.headers[_].invert == BOOLEAN
    input.Body.spec.httpRoute.match.headers[_].match.exact == STRING
    input.Body.spec.httpRoute.match.headers[_].match.prefix == STRING
    input.Body.spec.httpRoute.match.headers[_].match.range.end == LONG
    input.Body.spec.httpRoute.match.headers[_].match.range.start == LONG
    input.Body.spec.httpRoute.match.headers[_].match.regex == STRING
    input.Body.spec.httpRoute.match.headers[_].match.suffix == STRING
    input.Body.spec.httpRoute.match.headers[_].name == STRING
    input.Body.spec.httpRoute.match.method == enum_HttpMethod[_]
    input.Body.spec.httpRoute.match.path.exact == STRING
    input.Body.spec.httpRoute.match.path.regex == STRING
    input.Body.spec.httpRoute.match.port == INTEGER
    input.Body.spec.httpRoute.match.prefix == STRING
    input.Body.spec.httpRoute.match.queryParameters[_].match.exact == STRING
    input.Body.spec.httpRoute.match.queryParameters[_].name == STRING
    input.Body.spec.httpRoute.match.scheme == enum_HttpScheme[_]
    input.Body.spec.httpRoute.retryPolicy.httpRetryEvents[_] == STRING
    input.Body.spec.httpRoute.retryPolicy.maxRetries == LONG
    input.Body.spec.httpRoute.retryPolicy.perRetryTimeout.unit == enum_DurationUnit[_]
    input.Body.spec.httpRoute.retryPolicy.perRetryTimeout.value == LONG
    input.Body.spec.httpRoute.retryPolicy.tcpRetryEvents[_] == enum_TcpRetryPolicyEvent[_]
    input.Body.spec.httpRoute.timeout.idle.unit == enum_DurationUnit[_]
    input.Body.spec.httpRoute.timeout.idle.value == LONG
    input.Body.spec.httpRoute.timeout.perRequest.unit == enum_DurationUnit[_]
    input.Body.spec.httpRoute.timeout.perRequest.value == LONG
    input.Body.spec.priority == INTEGER
    input.Body.spec.tcpRoute.action.weightedTargets[_].port == INTEGER
    input.Body.spec.tcpRoute.action.weightedTargets[_].virtualNode == STRING
    input.Body.spec.tcpRoute.action.weightedTargets[_].weight == INTEGER
    input.Body.spec.tcpRoute.match.port == INTEGER
    input.Body.spec.tcpRoute.timeout.idle.unit == enum_DurationUnit[_]
    input.Body.spec.tcpRoute.timeout.idle.value == LONG
    input.ReqMap.meshName == STRING
    input.ReqMap.routeName == STRING
    input.ReqMap.virtualRouterName == STRING
    input.Qs.meshOwner == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

UpdateVirtualGateway

enum_VirtualGatewayListenerTlsMode := [ "STRICT", "PERMISSIVE", "DISABLED" ]
enum_VirtualGatewayPortProtocol := [ "http", "http2", "grpc" ]

valid {
    input.Body.clientToken == STRING
    input.Body.spec.backendDefaults.clientPolicy.tls.certificate.file.certificateChain == STRING
    input.Body.spec.backendDefaults.clientPolicy.tls.certificate.file.privateKey == STRING
    input.Body.spec.backendDefaults.clientPolicy.tls.certificate.sds.secretName == STRING
    input.Body.spec.backendDefaults.clientPolicy.tls.enforce == BOOLEAN
    input.Body.spec.backendDefaults.clientPolicy.tls.ports[_] == INTEGER
    input.Body.spec.backendDefaults.clientPolicy.tls.validation.subjectAlternativeNames.match.exact[_] == STRING
    input.Body.spec.backendDefaults.clientPolicy.tls.validation.trust.acm.certificateAuthorityArns[_] == STRING
    input.Body.spec.backendDefaults.clientPolicy.tls.validation.trust.file.certificateChain == STRING
    input.Body.spec.backendDefaults.clientPolicy.tls.validation.trust.sds.secretName == STRING
    input.Body.spec.listeners[_].connectionPool.grpc.maxRequests == INTEGER
    input.Body.spec.listeners[_].connectionPool.http.maxConnections == INTEGER
    input.Body.spec.listeners[_].connectionPool.http.maxPendingRequests == INTEGER
    input.Body.spec.listeners[_].connectionPool.http2.maxRequests == INTEGER
    input.Body.spec.listeners[_].healthCheck.healthyThreshold == INTEGER
    input.Body.spec.listeners[_].healthCheck.intervalMillis == LONG
    input.Body.spec.listeners[_].healthCheck.path == STRING
    input.Body.spec.listeners[_].healthCheck.port == INTEGER
    input.Body.spec.listeners[_].healthCheck.protocol == enum_VirtualGatewayPortProtocol[_]
    input.Body.spec.listeners[_].healthCheck.timeoutMillis == LONG
    input.Body.spec.listeners[_].healthCheck.unhealthyThreshold == INTEGER
    input.Body.spec.listeners[_].portMapping.port == INTEGER
    input.Body.spec.listeners[_].portMapping.protocol == enum_VirtualGatewayPortProtocol[_]
    input.Body.spec.listeners[_].tls.certificate.acm.certificateArn == STRING
    input.Body.spec.listeners[_].tls.certificate.file.certificateChain == STRING
    input.Body.spec.listeners[_].tls.certificate.file.privateKey == STRING
    input.Body.spec.listeners[_].tls.certificate.sds.secretName == STRING
    input.Body.spec.listeners[_].tls.mode == enum_VirtualGatewayListenerTlsMode[_]
    input.Body.spec.listeners[_].tls.validation.subjectAlternativeNames.match.exact[_] == STRING
    input.Body.spec.listeners[_].tls.validation.trust.file.certificateChain == STRING
    input.Body.spec.listeners[_].tls.validation.trust.sds.secretName == STRING
    input.Body.spec.logging.accessLog.file.format.json[_].key == STRING
    input.Body.spec.logging.accessLog.file.format.json[_].value == STRING
    input.Body.spec.logging.accessLog.file.format.text == STRING
    input.Body.spec.logging.accessLog.file.path == STRING
    input.ReqMap.meshName == STRING
    input.ReqMap.virtualGatewayName == STRING
    input.Qs.meshOwner == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

UpdateVirtualNode

enum_DnsResponseType := [ "LOADBALANCER", "ENDPOINTS" ]
enum_DurationUnit := [ "s", "ms" ]
enum_IpPreference := [ "IPv6_PREFERRED", "IPv4_PREFERRED", "IPv4_ONLY", "IPv6_ONLY" ]
enum_ListenerTlsMode := [ "STRICT", "PERMISSIVE", "DISABLED" ]
enum_PortProtocol := [ "http", "tcp", "http2", "grpc" ]

valid {
    input.Body.clientToken == STRING
    input.Body.spec.backendDefaults.clientPolicy.tls.certificate.file.certificateChain == STRING
    input.Body.spec.backendDefaults.clientPolicy.tls.certificate.file.privateKey == STRING
    input.Body.spec.backendDefaults.clientPolicy.tls.certificate.sds.secretName == STRING
    input.Body.spec.backendDefaults.clientPolicy.tls.enforce == BOOLEAN
    input.Body.spec.backendDefaults.clientPolicy.tls.ports[_] == INTEGER
    input.Body.spec.backendDefaults.clientPolicy.tls.validation.subjectAlternativeNames.match.exact[_] == STRING
    input.Body.spec.backendDefaults.clientPolicy.tls.validation.trust.acm.certificateAuthorityArns[_] == STRING
    input.Body.spec.backendDefaults.clientPolicy.tls.validation.trust.file.certificateChain == STRING
    input.Body.spec.backendDefaults.clientPolicy.tls.validation.trust.sds.secretName == STRING
    input.Body.spec.backends[_].virtualService.clientPolicy.tls.certificate.file.certificateChain == STRING
    input.Body.spec.backends[_].virtualService.clientPolicy.tls.certificate.file.privateKey == STRING
    input.Body.spec.backends[_].virtualService.clientPolicy.tls.certificate.sds.secretName == STRING
    input.Body.spec.backends[_].virtualService.clientPolicy.tls.enforce == BOOLEAN
    input.Body.spec.backends[_].virtualService.clientPolicy.tls.ports[_] == INTEGER
    input.Body.spec.backends[_].virtualService.clientPolicy.tls.validation.subjectAlternativeNames.match.exact[_] == STRING
    input.Body.spec.backends[_].virtualService.clientPolicy.tls.validation.trust.acm.certificateAuthorityArns[_] == STRING
    input.Body.spec.backends[_].virtualService.clientPolicy.tls.validation.trust.file.certificateChain == STRING
    input.Body.spec.backends[_].virtualService.clientPolicy.tls.validation.trust.sds.secretName == STRING
    input.Body.spec.backends[_].virtualService.virtualServiceName == STRING
    input.Body.spec.listeners[_].connectionPool.grpc.maxRequests == INTEGER
    input.Body.spec.listeners[_].connectionPool.http.maxConnections == INTEGER
    input.Body.spec.listeners[_].connectionPool.http.maxPendingRequests == INTEGER
    input.Body.spec.listeners[_].connectionPool.http2.maxRequests == INTEGER
    input.Body.spec.listeners[_].connectionPool.tcp.maxConnections == INTEGER
    input.Body.spec.listeners[_].healthCheck.healthyThreshold == INTEGER
    input.Body.spec.listeners[_].healthCheck.intervalMillis == LONG
    input.Body.spec.listeners[_].healthCheck.path == STRING
    input.Body.spec.listeners[_].healthCheck.port == INTEGER
    input.Body.spec.listeners[_].healthCheck.protocol == enum_PortProtocol[_]
    input.Body.spec.listeners[_].healthCheck.timeoutMillis == LONG
    input.Body.spec.listeners[_].healthCheck.unhealthyThreshold == INTEGER
    input.Body.spec.listeners[_].outlierDetection.baseEjectionDuration.unit == enum_DurationUnit[_]
    input.Body.spec.listeners[_].outlierDetection.baseEjectionDuration.value == LONG
    input.Body.spec.listeners[_].outlierDetection.interval.unit == enum_DurationUnit[_]
    input.Body.spec.listeners[_].outlierDetection.interval.value == LONG
    input.Body.spec.listeners[_].outlierDetection.maxEjectionPercent == INTEGER
    input.Body.spec.listeners[_].outlierDetection.maxServerErrors == LONG
    input.Body.spec.listeners[_].portMapping.port == INTEGER
    input.Body.spec.listeners[_].portMapping.protocol == enum_PortProtocol[_]
    input.Body.spec.listeners[_].timeout.grpc.idle.unit == enum_DurationUnit[_]
    input.Body.spec.listeners[_].timeout.grpc.idle.value == LONG
    input.Body.spec.listeners[_].timeout.grpc.perRequest.unit == enum_DurationUnit[_]
    input.Body.spec.listeners[_].timeout.grpc.perRequest.value == LONG
    input.Body.spec.listeners[_].timeout.http.idle.unit == enum_DurationUnit[_]
    input.Body.spec.listeners[_].timeout.http.idle.value == LONG
    input.Body.spec.listeners[_].timeout.http.perRequest.unit == enum_DurationUnit[_]
    input.Body.spec.listeners[_].timeout.http.perRequest.value == LONG
    input.Body.spec.listeners[_].timeout.http2.idle.unit == enum_DurationUnit[_]
    input.Body.spec.listeners[_].timeout.http2.idle.value == LONG
    input.Body.spec.listeners[_].timeout.http2.perRequest.unit == enum_DurationUnit[_]
    input.Body.spec.listeners[_].timeout.http2.perRequest.value == LONG
    input.Body.spec.listeners[_].timeout.tcp.idle.unit == enum_DurationUnit[_]
    input.Body.spec.listeners[_].timeout.tcp.idle.value == LONG
    input.Body.spec.listeners[_].tls.certificate.acm.certificateArn == STRING
    input.Body.spec.listeners[_].tls.certificate.file.certificateChain == STRING
    input.Body.spec.listeners[_].tls.certificate.file.privateKey == STRING
    input.Body.spec.listeners[_].tls.certificate.sds.secretName == STRING
    input.Body.spec.listeners[_].tls.mode == enum_ListenerTlsMode[_]
    input.Body.spec.listeners[_].tls.validation.subjectAlternativeNames.match.exact[_] == STRING
    input.Body.spec.listeners[_].tls.validation.trust.file.certificateChain == STRING
    input.Body.spec.listeners[_].tls.validation.trust.sds.secretName == STRING
    input.Body.spec.logging.accessLog.file.format.json[_].key == STRING
    input.Body.spec.logging.accessLog.file.format.json[_].value == STRING
    input.Body.spec.logging.accessLog.file.format.text == STRING
    input.Body.spec.logging.accessLog.file.path == STRING
    input.Body.spec.serviceDiscovery.awsCloudMap.attributes[_].key == STRING
    input.Body.spec.serviceDiscovery.awsCloudMap.attributes[_].value == STRING
    input.Body.spec.serviceDiscovery.awsCloudMap.ipPreference == enum_IpPreference[_]
    input.Body.spec.serviceDiscovery.awsCloudMap.namespaceName == STRING
    input.Body.spec.serviceDiscovery.awsCloudMap.serviceName == STRING
    input.Body.spec.serviceDiscovery.dns.hostname == STRING
    input.Body.spec.serviceDiscovery.dns.ipPreference == enum_IpPreference[_]
    input.Body.spec.serviceDiscovery.dns.responseType == enum_DnsResponseType[_]
    input.ReqMap.meshName == STRING
    input.ReqMap.virtualNodeName == STRING
    input.Qs.meshOwner == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

UpdateVirtualRouter

enum_PortProtocol := [ "http", "tcp", "http2", "grpc" ]

valid {
    input.Body.clientToken == STRING
    input.Body.spec.listeners[_].portMapping.port == INTEGER
    input.Body.spec.listeners[_].portMapping.protocol == enum_PortProtocol[_]
    input.ReqMap.meshName == STRING
    input.ReqMap.virtualRouterName == STRING
    input.Qs.meshOwner == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

UpdateVirtualService

valid {
    input.Body.clientToken == STRING
    input.Body.spec.provider.virtualNode.virtualNodeName == STRING
    input.Body.spec.provider.virtualRouter.virtualRouterName == STRING
    input.ReqMap.meshName == STRING
    input.ReqMap.virtualServiceName == STRING
    input.Qs.meshOwner == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}