Use grpcHealthCheck and targetGrpcProxy

pull/22547/head
Eric Gribkoff 5 years ago
parent 761d2b10f7
commit bc831fec51
  1. 118
      tools/run_tests/run_xds_tests.py

@ -122,6 +122,13 @@ argp.add_argument(
help=
'If provided, uses this file instead of retrieving via the GCP discovery '
'API')
argp.add_argument(
'--alpha_compute_discovery_document',
default=None,
type=str,
help=
'If provided, uses this file instead of retrieving via the alpha GCP '
'discovery API')
argp.add_argument('--network',
default='global/networks/default',
help='GCP network to use')
@ -577,14 +584,14 @@ def add_instance_group(gcp, zone, name, size):
def create_health_check(gcp, name):
config = {
'name': name,
'type': 'TCP',
'tcpHealthCheck': {
'portName': 'grpc'
'type': 'GRPC',
'grpcHealthCheck': {
'portSpecification': 'USE_SERVING_PORT'
}
}
logger.debug('Sending GCP request with body=%s', config)
result = gcp.compute.healthChecks().insert(project=gcp.project,
body=config).execute()
result = gcp.alpha_compute.healthChecks().insert(project=gcp.project,
body=config).execute()
wait_for_global_operation(gcp, result['name'])
gcp.health_check = GcpResource(config['name'], result['targetLink'])
@ -613,11 +620,11 @@ def add_backend_service(gcp, name):
'loadBalancingScheme': 'INTERNAL_SELF_MANAGED',
'healthChecks': [gcp.health_check.url],
'portName': 'grpc',
'protocol': 'HTTP2'
'protocol': 'GRPC'
}
logger.debug('Sending GCP request with body=%s', config)
result = gcp.compute.backendServices().insert(project=gcp.project,
body=config).execute()
result = gcp.alpha_compute.backendServices().insert(project=gcp.project,
body=config).execute()
wait_for_global_operation(gcp, result['name'])
backend_service = GcpResource(config['name'], result['targetLink'])
gcp.backend_services.append(backend_service)
@ -644,33 +651,45 @@ def create_url_map(gcp, name, backend_service, host_name):
gcp.url_map = GcpResource(config['name'], result['targetLink'])
def create_target_http_proxy(gcp, name):
def create_target_grpc_proxy(gcp, name):
config = {
'name': name,
'url_map': gcp.url_map.url,
# TODO(ericgribkoff) This requires forwarding rule's ip=0.0.0.0
# 'validate_for_proxyless': True,
}
logger.debug('Sending GCP request with body=%s', config)
result = gcp.compute.targetHttpProxies().insert(project=gcp.project,
body=config).execute()
result = gcp.alpha_compute.targetGrpcProxies().insert(
project=gcp.project, body=config).execute()
wait_for_global_operation(gcp, result['name'])
gcp.target_http_proxy = GcpResource(config['name'], result['targetLink'])
def create_global_forwarding_rule(gcp, name, ip, port):
config = {
'name': name,
'loadBalancingScheme': 'INTERNAL_SELF_MANAGED',
'portRange': str(port),
'IPAddress': ip,
'network': args.network,
'target': gcp.target_http_proxy.url,
}
logger.debug('Sending GCP request with body=%s', config)
result = gcp.compute.globalForwardingRules().insert(project=gcp.project,
body=config).execute()
wait_for_global_operation(gcp, result['name'])
gcp.global_forwarding_rule = GcpResource(config['name'],
result['targetLink'])
gcp.target_grpc_proxy = GcpResource(config['name'], result['targetLink'])
def create_global_forwarding_rule(gcp, name, potential_ips, potential_ports):
for port in potential_ports:
for ip in potential_ips:
try:
config = {
'name': name,
'loadBalancingScheme': 'INTERNAL_SELF_MANAGED',
'portRange': str(port),
'IPAddress': ip,
'network': args.network,
'target': gcp.target_grpc_proxy.url,
}
logger.debug('Sending GCP request with body=%s', config)
result = gcp.alpha_compute.globalForwardingRules().insert(
project=gcp.project, body=config).execute()
wait_for_global_operation(gcp, result['name'])
gcp.global_forwarding_rule = GcpResource(
config['name'], result['targetLink'])
gcp.service_port = port
return
except googleapiclient.errors.HttpError as http_error:
logger.warning(
'Got error %s when attempting to create forwarding rule to '
'%s:%d. Retrying with another ip:port.' %
(http_error, ip, port))
def delete_global_forwarding_rule(gcp):
@ -683,11 +702,11 @@ def delete_global_forwarding_rule(gcp):
logger.info('Delete failed: %s', http_error)
def delete_target_http_proxy(gcp):
def delete_target_grpc_proxy(gcp):
try:
result = gcp.compute.targetHttpProxies().delete(
result = gcp.alpha_compute.targetGrpcProxies().delete(
project=gcp.project,
targetHttpProxy=gcp.target_http_proxy.name).execute()
targetGrpcProxy=gcp.target_grpc_proxy.name).execute()
wait_for_global_operation(gcp, result['name'])
except googleapiclient.errors.HttpError as http_error:
logger.info('Delete failed: %s', http_error)
@ -769,7 +788,7 @@ def patch_backend_instances(gcp,
} for instance_group in instance_groups],
}
logger.debug('Sending GCP request with body=%s', config)
result = gcp.compute.backendServices().patch(
result = gcp.alpha_compute.backendServices().patch(
project=gcp.project, backendService=backend_service.name,
body=config).execute()
wait_for_global_operation(gcp, result['name'])
@ -910,8 +929,8 @@ def start_xds_client(cmd):
def clean_up(gcp):
if gcp.global_forwarding_rule:
delete_global_forwarding_rule(gcp)
if gcp.target_http_proxy:
delete_target_http_proxy(gcp)
if gcp.target_grpc_proxy:
delete_target_grpc_proxy(gcp)
if gcp.url_map:
delete_url_map(gcp)
delete_backend_services(gcp)
@ -941,14 +960,15 @@ class GcpResource(object):
class GcpState(object):
def __init__(self, compute, project):
def __init__(self, compute, alpha_compute, project):
self.compute = compute
self.alpha_compute = alpha_compute
self.project = project
self.health_check = None
self.health_check_firewall_rule = None
self.backend_services = []
self.url_map = None
self.target_http_proxy = None
self.target_grpc_proxy = None
self.global_forwarding_rule = None
self.service_port = None
self.instance_template = None
@ -959,18 +979,22 @@ if args.compute_discovery_document:
with open(args.compute_discovery_document, 'r') as discovery_doc:
compute = googleapiclient.discovery.build_from_document(
discovery_doc.read())
with open(args.alpha_compute_discovery_document, 'r') as discovery_doc:
alpha_compute = googleapiclient.discovery.build_from_document(
discovery_doc.read())
else:
compute = googleapiclient.discovery.build('compute', 'v1')
alpha_compute = googleapiclient.discovery.build('compute', 'alpha')
try:
gcp = GcpState(compute, args.project_id)
gcp = GcpState(compute, alpha_compute, args.project_id)
health_check_name = _BASE_HEALTH_CHECK_NAME + args.gcp_suffix
firewall_name = _BASE_FIREWALL_RULE_NAME + args.gcp_suffix
backend_service_name = _BASE_BACKEND_SERVICE_NAME + args.gcp_suffix
alternate_backend_service_name = _BASE_BACKEND_SERVICE_NAME + '-alternate' + args.gcp_suffix
url_map_name = _BASE_URL_MAP_NAME + args.gcp_suffix
service_host_name = _BASE_SERVICE_HOST + args.gcp_suffix
target_http_proxy_name = _BASE_TARGET_PROXY_NAME + args.gcp_suffix
target_grpc_proxy_name = _BASE_TARGET_PROXY_NAME + args.gcp_suffix
forwarding_rule_name = _BASE_FORWARDING_RULE_NAME + args.gcp_suffix
template_name = _BASE_TEMPLATE_NAME + args.gcp_suffix
instance_group_name = _BASE_INSTANCE_GROUP_NAME + args.gcp_suffix
@ -984,7 +1008,7 @@ try:
alternate_backend_service = add_backend_service(
gcp, alternate_backend_service_name)
create_url_map(gcp, url_map_name, backend_service, service_host_name)
create_target_http_proxy(gcp, target_http_proxy_name)
create_target_grpc_proxy(gcp, target_grpc_proxy_name)
potential_service_ports = list(args.service_port_range)
random.shuffle(potential_service_ports)
if args.forwarding_rule_ip_prefix == '':
@ -994,18 +1018,8 @@ try:
args.forwarding_rule_ip_prefix + str(x) for x in range(256)
]
random.shuffle(potential_ips)
for port in potential_service_ports:
for ip in potential_ips:
try:
create_global_forwarding_rule(gcp, forwarding_rule_name, ip,
port)
gcp.service_port = port
break
except googleapiclient.errors.HttpError as http_error:
logger.warning(
'Got error %s when attempting to create forwarding rule to '
'%s:%d. Retrying with another ip:port.' %
(http_error, ip, port))
create_global_forwarding_rule(gcp, forwarding_rule_name, potential_ips,
potential_service_ports)
if not gcp.service_port:
raise Exception(
'Failed to find a valid ip:port for the forwarding rule')

Loading…
Cancel
Save