|
|
|
@ -71,8 +71,8 @@ argp.add_argument( |
|
|
|
|
'--client_cmd', |
|
|
|
|
default=None, |
|
|
|
|
help='Command to launch xDS test client. This script will fill in ' |
|
|
|
|
'{service_host}, {service_port},{stats_port} and {qps} parameters using ' |
|
|
|
|
'str.format(), and generate the GRPC_XDS_BOOTSTRAP file.') |
|
|
|
|
'{server_uri}, {stats_port} and {qps} parameters using str.format(), and ' |
|
|
|
|
'generate the GRPC_XDS_BOOTSTRAP file.') |
|
|
|
|
argp.add_argument('--zone', default='us-central1-a') |
|
|
|
|
argp.add_argument('--secondary_zone', |
|
|
|
|
default='us-west1-b', |
|
|
|
@ -101,12 +101,16 @@ argp.add_argument('--network', |
|
|
|
|
default='global/networks/default', |
|
|
|
|
help='GCP network to use') |
|
|
|
|
argp.add_argument('--service_port_range', |
|
|
|
|
default='8080:8100', |
|
|
|
|
default='80', |
|
|
|
|
type=parse_port_range, |
|
|
|
|
help='Listening port for created gRPC backends. Specified as ' |
|
|
|
|
'either a single int or as a range in the format min:max, in ' |
|
|
|
|
'which case an available port p will be chosen s.t. min <= p ' |
|
|
|
|
'<= max') |
|
|
|
|
argp.add_argument('--forwarding_rule_ip_prefix', |
|
|
|
|
default='172.16.0.', |
|
|
|
|
help='If set, an available IP with this prefix followed by ' |
|
|
|
|
'0-255 will be used for the generated forwarding rule.') |
|
|
|
|
argp.add_argument( |
|
|
|
|
'--stats_port', |
|
|
|
|
default=8079, |
|
|
|
@ -135,6 +139,7 @@ args = argp.parse_args() |
|
|
|
|
if args.verbose: |
|
|
|
|
logger.setLevel(logging.DEBUG) |
|
|
|
|
|
|
|
|
|
_DEFAULT_SERVICE_PORT = 80 |
|
|
|
|
_WAIT_FOR_BACKEND_SEC = args.wait_for_backend_sec |
|
|
|
|
_WAIT_FOR_OPERATION_SEC = 60 |
|
|
|
|
_INSTANCE_GROUP_SIZE = 2 |
|
|
|
@ -560,12 +565,12 @@ def create_target_http_proxy(gcp, name): |
|
|
|
|
gcp.target_http_proxy = GcpResource(config['name'], result['targetLink']) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def create_global_forwarding_rule(gcp, name, port): |
|
|
|
|
def create_global_forwarding_rule(gcp, name, ip, port): |
|
|
|
|
config = { |
|
|
|
|
'name': name, |
|
|
|
|
'loadBalancingScheme': 'INTERNAL_SELF_MANAGED', |
|
|
|
|
'portRange': str(port), |
|
|
|
|
'IPAddress': '0.0.0.0', |
|
|
|
|
'IPAddress': ip, |
|
|
|
|
'network': args.network, |
|
|
|
|
'target': gcp.target_http_proxy.url, |
|
|
|
|
} |
|
|
|
@ -886,18 +891,28 @@ try: |
|
|
|
|
create_target_http_proxy(gcp, target_http_proxy_name) |
|
|
|
|
potential_service_ports = list(args.service_port_range) |
|
|
|
|
random.shuffle(potential_service_ports) |
|
|
|
|
if args.forwarding_rule_ip_prefix == '': |
|
|
|
|
potential_ips = ['0.0.0.0'] |
|
|
|
|
else: |
|
|
|
|
potential_ips = [ |
|
|
|
|
args.forwarding_rule_ip_prefix + str(x) for x in range(256) |
|
|
|
|
] |
|
|
|
|
random.shuffle(potential_ips) |
|
|
|
|
for port in potential_service_ports: |
|
|
|
|
try: |
|
|
|
|
create_global_forwarding_rule(gcp, forwarding_rule_name, 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 ' |
|
|
|
|
'port %d. Retrying with another port.' % (http_error, port)) |
|
|
|
|
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)) |
|
|
|
|
if not gcp.service_port: |
|
|
|
|
raise Exception('Failed to pick a service port in the range %s' % |
|
|
|
|
args.service_port_range) |
|
|
|
|
raise Exception( |
|
|
|
|
'Failed to find a valid ip:port for the forwarding rule') |
|
|
|
|
create_instance_template(gcp, template_name, args.network, |
|
|
|
|
args.source_image) |
|
|
|
|
instance_group = add_instance_group(gcp, args.zone, instance_group_name, |
|
|
|
@ -975,8 +990,11 @@ try: |
|
|
|
|
|
|
|
|
|
wait_for_healthy_backends(gcp, backend_service, instance_group) |
|
|
|
|
|
|
|
|
|
cmd = args.client_cmd.format(service_host=service_host_name, |
|
|
|
|
service_port=gcp.service_port, |
|
|
|
|
if gcp.service_port == _DEFAULT_SERVICE_PORT: |
|
|
|
|
server_uri = service_host_name |
|
|
|
|
else: |
|
|
|
|
server_uri = service_host_name + ':' + str(gcp.service_port) |
|
|
|
|
cmd = args.client_cmd.format(server_uri=server_uri, |
|
|
|
|
stats_port=args.stats_port, |
|
|
|
|
qps=args.qps) |
|
|
|
|
client_process = start_xds_client(cmd) |
|
|
|
|