traffic_director.py
Go to the documentation of this file.
1 # Copyright 2020 gRPC authors.
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 # http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14 import functools
15 import logging
16 import random
17 from typing import Any, Dict, List, Optional, Set
18 
19 from framework import xds_flags
20 from framework.infrastructure import gcp
21 
22 logger = logging.getLogger(__name__)
23 
24 # Type aliases
25 # Compute
27 GcpResource = _ComputeV1.GcpResource
28 HealthCheckProtocol = _ComputeV1.HealthCheckProtocol
29 ZonalGcpResource = _ComputeV1.ZonalGcpResource
30 BackendServiceProtocol = _ComputeV1.BackendServiceProtocol
31 _BackendGRPC = BackendServiceProtocol.GRPC
32 _HealthCheckGRPC = HealthCheckProtocol.GRPC
33 
34 # Network Security
39 
40 # Network Services
46 
47 # Testing metadata consts
48 TEST_AFFINITY_METADATA_KEY = 'xds_md'
49 
50 
51 class TrafficDirectorManager: # pylint: disable=too-many-public-methods
52  compute: _ComputeV1
53  resource_prefix: str
54  resource_suffix: str
55 
56  BACKEND_SERVICE_NAME = "backend-service"
57  ALTERNATIVE_BACKEND_SERVICE_NAME = "backend-service-alt"
58  AFFINITY_BACKEND_SERVICE_NAME = "backend-service-affinity"
59  HEALTH_CHECK_NAME = "health-check"
60  URL_MAP_NAME = "url-map"
61  ALTERNATIVE_URL_MAP_NAME = "url-map-alt"
62  URL_MAP_PATH_MATCHER_NAME = "path-matcher"
63  TARGET_PROXY_NAME = "target-proxy"
64  ALTERNATIVE_TARGET_PROXY_NAME = "target-proxy-alt"
65  FORWARDING_RULE_NAME = "forwarding-rule"
66  ALTERNATIVE_FORWARDING_RULE_NAME = "forwarding-rule-alt"
67  FIREWALL_RULE_NAME = "allow-health-checks"
68 
69  def __init__(
70  self,
71  gcp_api_manager: gcp.api.GcpApiManager,
72  project: str,
73  *,
74  resource_prefix: str,
75  resource_suffix: str,
76  network: str = 'default',
77  compute_api_version: str = 'v1',
78  ):
79  # API
80  self.compute = _ComputeV1(gcp_api_manager,
81  project,
82  version=compute_api_version)
83 
84  # Settings
85  self.project: str = project
86  self.network: str = network
87  self.resource_prefix: str = resource_prefix
88  self.resource_suffix: str = resource_suffix
89 
90  # Managed resources
91  self.health_check: Optional[GcpResource] = None
92  self.backend_service: Optional[GcpResource] = None
93  # TODO(sergiitk): remove this flag once backend service resource loaded
94  self.backend_service_protocol: Optional[BackendServiceProtocol] = None
95  self.url_map: Optional[GcpResource] = None
96  self.alternative_url_map: Optional[GcpResource] = None
97  self.firewall_rule: Optional[GcpResource] = None
98  self.target_proxy: Optional[GcpResource] = None
99  # TODO(sergiitk): remove this flag once target proxy resource loaded
100  self.target_proxy_is_http: bool = False
101  self.alternative_target_proxy: Optional[GcpResource] = None
102  self.forwarding_rule: Optional[GcpResource] = None
103  self.alternative_forwarding_rule: Optional[GcpResource] = None
104  self.backends: Set[ZonalGcpResource] = set()
105  self.alternative_backend_service: Optional[GcpResource] = None
106  # TODO(sergiitk): remove this flag once backend service resource loaded
108  BackendServiceProtocol] = None
109  self.alternative_backends: Set[ZonalGcpResource] = set()
110  self.affinity_backend_service: Optional[GcpResource] = None
111  # TODO(sergiitk): remove this flag once backend service resource loaded
112  self.affinity_backend_service_protocol: Optional[
113  BackendServiceProtocol] = None
114  self.affinity_backends: Set[ZonalGcpResource] = set()
115 
116  @property
117  def network_url(self):
118  return f'global/networks/{self.network}'
119 
121  self,
122  service_host,
123  service_port,
124  *,
125  backend_protocol: Optional[BackendServiceProtocol] = _BackendGRPC,
126  health_check_port: Optional[int] = None):
127  self.setup_backend_for_grpc(protocol=backend_protocol,
128  health_check_port=health_check_port)
129  self.setup_routing_rule_map_for_grpc(service_host, service_port)
130 
132  self,
133  *,
134  protocol: Optional[BackendServiceProtocol] = _BackendGRPC,
135  health_check_port: Optional[int] = None):
136  self.create_health_check(port=health_check_port)
137  self.create_backend_service(protocol)
138 
139  def setup_routing_rule_map_for_grpc(self, service_host, service_port):
140  self.create_url_map(service_host, service_port)
141  self.create_target_proxy()
142  self.create_forwarding_rule(service_port)
143 
144  def cleanup(self, *, force=False):
145  # Cleanup in the reverse order of creation
146  self.delete_forwarding_rule(force=force)
147  self.delete_alternative_forwarding_rule(force=force)
148  self.delete_target_http_proxy(force=force)
149  self.delete_target_grpc_proxy(force=force)
150  self.delete_alternative_target_grpc_proxy(force=force)
151  self.delete_url_map(force=force)
152  self.delete_alternative_url_map(force=force)
153  self.delete_backend_service(force=force)
154  self.delete_alternative_backend_service(force=force)
155  self.delete_affinity_backend_service(force=force)
156  self.delete_health_check(force=force)
157 
158  @functools.lru_cache(None)
159  def make_resource_name(self, name: str) -> str:
160  """Make dash-separated resource name with resource prefix and suffix."""
161  parts = [self.resource_prefix, name]
162  # Avoid trailing dash when the suffix is empty.
163  if self.resource_suffix:
164  parts.append(self.resource_suffix)
165  return '-'.join(parts)
166 
168  self,
169  *,
170  protocol: Optional[HealthCheckProtocol] = _HealthCheckGRPC,
171  port: Optional[int] = None):
172  if self.health_check:
173  raise ValueError(f'Health check {self.health_check.name} '
174  'already created, delete it first')
175  if protocol is None:
176  protocol = _HealthCheckGRPC
177 
178  name = self.make_resource_name(self.HEALTH_CHECK_NAME)
179  logger.info('Creating %s Health Check "%s"', protocol.name, name)
180  resource = self.compute.create_health_check(name, protocol, port=port)
181  self.health_check = resource
182 
183  def delete_health_check(self, force=False):
184  if force:
185  name = self.make_resource_name(self.HEALTH_CHECK_NAME)
186  elif self.health_check:
187  name = self.health_check.name
188  else:
189  return
190  logger.info('Deleting Health Check "%s"', name)
191  self.compute.delete_health_check(name)
192  self.health_check = None
193 
195  self,
196  protocol: Optional[BackendServiceProtocol] = _BackendGRPC,
197  subset_size: Optional[int] = None,
198  affinity_header: Optional[str] = None,
199  locality_lb_policies: Optional[List[dict]] = None):
200  if protocol is None:
201  protocol = _BackendGRPC
202 
203  name = self.make_resource_name(self.BACKEND_SERVICE_NAME)
204  logger.info('Creating %s Backend Service "%s"', protocol.name, name)
205  resource = self.compute.create_backend_service_traffic_director(
206  name,
207  health_check=self.health_check,
208  protocol=protocol,
209  subset_size=subset_size,
210  affinity_header=affinity_header,
211  locality_lb_policies=locality_lb_policies)
212  self.backend_service = resource
213  self.backend_service_protocol = protocol
214 
216  name = self.make_resource_name(self.BACKEND_SERVICE_NAME)
217  resource = self.compute.get_backend_service_traffic_director(name)
218  self.backend_service = resource
219 
220  def delete_backend_service(self, force=False):
221  if force:
222  name = self.make_resource_name(self.BACKEND_SERVICE_NAME)
223  elif self.backend_service:
224  name = self.backend_service.name
225  else:
226  return
227  logger.info('Deleting Backend Service "%s"', name)
229  self.backend_service = None
230 
232  name,
233  zones,
234  max_rate_per_endpoint: Optional[
235  int] = None):
236  logger.info('Waiting for Network Endpoint Groups to load endpoints.')
237  for zone in zones:
238  backend = self.compute.wait_for_network_endpoint_group(name, zone)
239  logger.info('Loaded NEG "%s" in zone %s', backend.name,
240  backend.zone)
241  self.backends.add(backend)
242  self.backend_service_patch_backends(max_rate_per_endpoint)
243 
244  def backend_service_remove_neg_backends(self, name, zones):
245  logger.info('Waiting for Network Endpoint Groups to load endpoints.')
246  for zone in zones:
247  backend = self.compute.wait_for_network_endpoint_group(name, zone)
248  logger.info('Loaded NEG "%s" in zone %s', backend.name,
249  backend.zone)
250  self.backends.remove(backend)
252 
254  self, max_rate_per_endpoint: Optional[int] = None):
255  logging.info('Adding backends to Backend Service %s: %r',
256  self.backend_service.name, self.backends)
258  self.backends,
259  max_rate_per_endpoint)
260 
262  logging.info('Removing backends from Backend Service %s',
263  self.backend_service.name)
265 
267  logger.debug(
268  "Waiting for Backend Service %s to report all backends healthy %r",
269  self.backend_service, self.backends)
271  self.backends)
272 
274  self, protocol: Optional[BackendServiceProtocol] = _BackendGRPC):
275  if protocol is None:
276  protocol = _BackendGRPC
278  logger.info('Creating %s Alternative Backend Service "%s"',
279  protocol.name, name)
280  resource = self.compute.create_backend_service_traffic_director(
281  name, health_check=self.health_check, protocol=protocol)
284 
287  resource = self.compute.get_backend_service_traffic_director(name)
288  self.alternative_backend_service = resource
289 
290  def delete_alternative_backend_service(self, force=False):
291  if force:
292  name = self.make_resource_name(
294  elif self.alternative_backend_service:
295  name = self.alternative_backend_service.name
296  else:
297  return
298  logger.info('Deleting Alternative Backend Service "%s"', name)
300  self.alternative_backend_service = None
301 
303  logger.info('Waiting for Network Endpoint Groups to load endpoints.')
304  for zone in zones:
305  backend = self.compute.wait_for_network_endpoint_group(name, zone)
306  logger.info('Loaded NEG "%s" in zone %s', backend.name,
307  backend.zone)
308  self.alternative_backends.add(backend)
310 
312  logging.info('Adding backends to Backend Service %s: %r',
313  self.alternative_backend_service.name,
314  self.alternative_backends)
316  self.alternative_backend_service, self.alternative_backends)
317 
319  logging.info('Removing backends from Backend Service %s',
320  self.alternative_backend_service.name)
323 
325  logger.debug(
326  "Waiting for Backend Service %s to report all backends healthy %r",
327  self.alternative_backend_service, self.alternative_backends)
329  self.alternative_backend_service, self.alternative_backends)
330 
332  self, protocol: Optional[BackendServiceProtocol] = _BackendGRPC):
333  if protocol is None:
334  protocol = _BackendGRPC
336  logger.info('Creating %s Affinity Backend Service "%s"', protocol.name,
337  name)
338  resource = self.compute.create_backend_service_traffic_director(
339  name,
340  health_check=self.health_check,
341  protocol=protocol,
342  affinity_header=TEST_AFFINITY_METADATA_KEY)
343  self.affinity_backend_service = resource
344  self.affinity_backend_service_protocol = protocol
345 
348  resource = self.compute.get_backend_service_traffic_director(name)
349  self.affinity_backend_service = resource
350 
351  def delete_affinity_backend_service(self, force=False):
352  if force:
354  elif self.affinity_backend_service:
355  name = self.affinity_backend_service.name
356  else:
357  return
358  logger.info('Deleting Affinity Backend Service "%s"', name)
360  self.affinity_backend_service = None
361 
363  logger.info('Waiting for Network Endpoint Groups to load endpoints.')
364  for zone in zones:
365  backend = self.compute.wait_for_network_endpoint_group(name, zone)
366  logger.info('Loaded NEG "%s" in zone %s', backend.name,
367  backend.zone)
368  self.affinity_backends.add(backend)
370 
372  logging.info('Adding backends to Backend Service %s: %r',
373  self.affinity_backend_service.name, self.affinity_backends)
375  self.affinity_backend_service, self.affinity_backends)
376 
378  logging.info('Removing backends from Backend Service %s',
379  self.affinity_backend_service.name)
382 
384  logger.debug(
385  "Waiting for Backend Service %s to report all backends healthy %r",
386  self.affinity_backend_service, self.affinity_backends)
388  self.affinity_backend_service, self.affinity_backends)
389 
390  @staticmethod
392  name: str,
393  matcher_name: str,
394  src_hosts,
395  dst_default_backend_service: GcpResource,
396  dst_host_rule_match_backend_service: Optional[GcpResource] = None,
397  ) -> Dict[str, Any]:
398  if dst_host_rule_match_backend_service is None:
399  dst_host_rule_match_backend_service = dst_default_backend_service
400  return {
401  'name':
402  name,
403  'defaultService':
404  dst_default_backend_service.url,
405  'hostRules': [{
406  'hosts': src_hosts,
407  'pathMatcher': matcher_name,
408  }],
409  'pathMatchers': [{
410  'name': matcher_name,
411  'defaultService': dst_host_rule_match_backend_service.url,
412  }],
413  }
414 
415  def create_url_map(self, src_host: str, src_port: int) -> GcpResource:
416  src_address = f'{src_host}:{src_port}'
417  name = self.make_resource_name(self.URL_MAP_NAME)
418  matcher_name = self.make_resource_name(self.URL_MAP_PATH_MATCHER_NAME)
419  logger.info('Creating URL map "%s": %s -> %s', name, src_address,
420  self.backend_service.name)
421  resource = self.compute.create_url_map_with_content(
422  self._generate_url_map_body(name, matcher_name, [src_address],
423  self.backend_service))
424  self.url_map = resource
425  return resource
426 
427  def patch_url_map(self, src_host: str, src_port: int,
428  backend_service: GcpResource):
429  src_address = f'{src_host}:{src_port}'
430  name = self.make_resource_name(self.URL_MAP_NAME)
431  matcher_name = self.make_resource_name(self.URL_MAP_PATH_MATCHER_NAME)
432  logger.info('Patching URL map "%s": %s -> %s', name, src_address,
433  backend_service.name)
434  self.compute.patch_url_map(
435  self.url_map,
436  self._generate_url_map_body(name, matcher_name, [src_address],
437  backend_service))
438 
439  def create_url_map_with_content(self, url_map_body: Any) -> GcpResource:
440  logger.info('Creating URL map: %s', url_map_body)
441  resource = self.compute.create_url_map_with_content(url_map_body)
442  self.url_map = resource
443  return resource
444 
445  def delete_url_map(self, force=False):
446  if force:
447  name = self.make_resource_name(self.URL_MAP_NAME)
448  elif self.url_map:
449  name = self.url_map.name
450  else:
451  return
452  logger.info('Deleting URL Map "%s"', name)
453  self.compute.delete_url_map(name)
454  self.url_map = None
455 
457  self,
458  src_host: str,
459  src_port: int,
460  backend_service: Optional[GcpResource] = None) -> GcpResource:
462  src_address = f'{src_host}:{src_port}'
463  matcher_name = self.make_resource_name(self.URL_MAP_PATH_MATCHER_NAME)
464  if backend_service is None:
465  backend_service = self.alternative_backend_service
466  logger.info('Creating alternative URL map "%s": %s -> %s', name,
467  src_address, backend_service.name)
468  resource = self.compute.create_url_map_with_content(
469  self._generate_url_map_body(name, matcher_name, [src_address],
470  backend_service))
471  self.alternative_url_map = resource
472  return resource
473 
474  def delete_alternative_url_map(self, force=False):
475  if force:
477  elif self.alternative_url_map:
478  name = self.alternative_url_map.name
479  else:
480  return
481  logger.info('Deleting alternative URL Map "%s"', name)
482  self.compute.delete_url_map(name)
483  self.url_map = None
484 
486  name = self.make_resource_name(self.TARGET_PROXY_NAME)
487  if self.backend_service_protocol is BackendServiceProtocol.GRPC:
488  target_proxy_type = 'GRPC'
489  create_proxy_fn = self.compute.create_target_grpc_proxy
490  self.target_proxy_is_http = False
491  elif self.backend_service_protocol is BackendServiceProtocol.HTTP2:
492  target_proxy_type = 'HTTP'
493  create_proxy_fn = self.compute.create_target_http_proxy
494  self.target_proxy_is_http = True
495  else:
496  raise TypeError('Unexpected backend service protocol')
497 
498  logger.info('Creating target %s proxy "%s" to URL map %s', name,
499  target_proxy_type, self.url_map.name)
500  self.target_proxy = create_proxy_fn(name, self.url_map)
501 
502  def delete_target_grpc_proxy(self, force=False):
503  if force:
504  name = self.make_resource_name(self.TARGET_PROXY_NAME)
505  elif self.target_proxy:
506  name = self.target_proxy.name
507  else:
508  return
509  logger.info('Deleting Target GRPC proxy "%s"', name)
511  self.target_proxy = None
512  self.target_proxy_is_http = False
513 
514  def delete_target_http_proxy(self, force=False):
515  if force:
516  name = self.make_resource_name(self.TARGET_PROXY_NAME)
517  elif self.target_proxy and self.target_proxy_is_http:
518  name = self.target_proxy.name
519  else:
520  return
521  logger.info('Deleting HTTP Target proxy "%s"', name)
523  self.target_proxy = None
524  self.target_proxy_is_http = False
525 
528  if self.backend_service_protocol is BackendServiceProtocol.GRPC:
529  logger.info(
530  'Creating alternative target GRPC proxy "%s" to URL map %s',
531  name, self.alternative_url_map.name)
532  self.alternative_target_proxy = self.compute.create_target_grpc_proxy(
533  name, self.alternative_url_map, False)
534  else:
535  raise TypeError('Unexpected backend service protocol')
536 
537  def delete_alternative_target_grpc_proxy(self, force=False):
538  if force:
540  elif self.alternative_target_proxy:
541  name = self.alternative_target_proxy.name
542  else:
543  return
544  logger.info('Deleting alternative Target GRPC proxy "%s"', name)
546  self.alternative_target_proxy = None
547 
549  self,
550  *,
551  lo: int = 1024, # To avoid confusion, skip well-known ports.
552  hi: int = 65535,
553  attempts: int = 25) -> int:
554  for _ in range(attempts):
555  src_port = random.randint(lo, hi)
556  if not self.compute.exists_forwarding_rule(src_port):
557  return src_port
558  # TODO(sergiitk): custom exception
559  raise RuntimeError("Couldn't find unused forwarding rule port")
560 
561  def create_forwarding_rule(self, src_port: int):
562  name = self.make_resource_name(self.FORWARDING_RULE_NAME)
563  src_port = int(src_port)
564  logging.info(
565  'Creating forwarding rule "%s" in network "%s": 0.0.0.0:%s -> %s',
566  name, self.network, src_port, self.target_proxy.url)
567  resource = self.compute.create_forwarding_rule(name, src_port,
568  self.target_proxy,
569  self.network_url)
570  self.forwarding_rule = resource
571  return resource
572 
573  def delete_forwarding_rule(self, force=False):
574  if force:
575  name = self.make_resource_name(self.FORWARDING_RULE_NAME)
576  elif self.forwarding_rule:
577  name = self.forwarding_rule.name
578  else:
579  return
580  logger.info('Deleting Forwarding rule "%s"', name)
582  self.forwarding_rule = None
583 
585  src_port: int,
586  ip_address='0.0.0.0'):
588  src_port = int(src_port)
589  logging.info(
590  'Creating alternative forwarding rule "%s" in network "%s": %s:%s -> %s',
591  name, self.network, ip_address, src_port,
592  self.alternative_target_proxy.url)
593  resource = self.compute.create_forwarding_rule(
594  name,
595  src_port,
598  ip_address=ip_address)
599  self.alternative_forwarding_rule = resource
600  return resource
601 
602  def delete_alternative_forwarding_rule(self, force=False):
603  if force:
604  name = self.make_resource_name(
606  elif self.alternative_forwarding_rule:
607  name = self.alternative_forwarding_rule.name
608  else:
609  return
610  logger.info('Deleting alternative Forwarding rule "%s"', name)
612  self.alternative_forwarding_rule = None
613 
614  def create_firewall_rule(self, allowed_ports: List[str]):
615  name = self.make_resource_name(self.FIREWALL_RULE_NAME)
616  logging.info(
617  'Creating firewall rule "%s" in network "%s" with allowed ports %s',
618  name, self.network, allowed_ports)
619  resource = self.compute.create_firewall_rule(
620  name, self.network_url, xds_flags.FIREWALL_SOURCE_RANGE.value,
621  allowed_ports)
622  self.firewall_rule = resource
623 
624  def delete_firewall_rule(self, force=False):
625  """The firewall rule won't be automatically removed."""
626  if force:
627  name = self.make_resource_name(self.FIREWALL_RULE_NAME)
628  elif self.firewall_rule:
629  name = self.firewall_rule.name
630  else:
631  return
632  logger.info('Deleting Firewall Rule "%s"', name)
633  self.compute.delete_firewall_rule(name)
634  self.firewall_rule = None
635 
636 
638 
639  GRPC_ROUTE_NAME = "grpc-route"
640  MESH_NAME = "mesh"
641 
642  netsvc: _NetworkServicesV1Alpha1
643 
644  def __init__(self,
645  gcp_api_manager: gcp.api.GcpApiManager,
646  project: str,
647  *,
648  resource_prefix: str,
649  resource_suffix: Optional[str] = None,
650  network: str = 'default',
651  compute_api_version: str = 'v1'):
652  super().__init__(gcp_api_manager,
653  project,
654  resource_prefix=resource_prefix,
655  resource_suffix=resource_suffix,
656  network=network,
657  compute_api_version=compute_api_version)
658 
659  # API
660  self.netsvc = _NetworkServicesV1Alpha1(gcp_api_manager, project)
661 
662  # Managed resources
663  # TODO(gnossen) PTAL at the pylint error
664  self.grpc_route: Optional[GrpcRoute] = None
665  self.mesh: Optional[Mesh] = None
666 
667  def create_mesh(self) -> GcpResource:
668  name = self.make_resource_name(self.MESH_NAME)
669  logger.info("Creating Mesh %s", name)
670  body = {}
671  resource = self.netsvc.create_mesh(name, body)
672  self.mesh = self.netsvc.get_mesh(name)
673  logger.debug("Loaded Mesh: %s", self.mesh)
674  return resource
675 
676  def delete_mesh(self, force=False):
677  if force:
678  name = self.make_resource_name(self.MESH_NAME)
679  elif self.mesh:
680  name = self.mesh.name
681  else:
682  return
683  logger.info('Deleting Mesh %s', name)
684  self.netsvc.delete_mesh(name)
685  self.mesh = None
686 
687  def create_grpc_route(self, src_host: str, src_port: int) -> GcpResource:
688  host = f'{src_host}:{src_port}'
689  service_name = self.netsvc.resource_full_name(self.backend_service.name,
690  "backendServices")
691  body = {
692  "meshes": [self.mesh.url],
693  "hostnames":
694  host,
695  "rules": [{
696  "action": {
697  "destinations": [{
698  "serviceName": service_name
699  }]
700  }
701  }],
702  }
703  name = self.make_resource_name(self.GRPC_ROUTE_NAME)
704  logger.info("Creating GrpcRoute %s", name)
705  resource = self.netsvc.create_grpc_route(name, body)
706  self.grpc_route = self.netsvc.get_grpc_route(name)
707  logger.debug("Loaded GrpcRoute: %s", self.grpc_route)
708  return resource
709 
710  def create_grpc_route_with_content(self, body: Any) -> GcpResource:
711  name = self.make_resource_name(self.GRPC_ROUTE_NAME)
712  logger.info("Creating GrpcRoute %s", name)
713  resource = self.netsvc.create_grpc_route(name, body)
714  self.grpc_route = self.netsvc.get_grpc_route(name)
715  logger.debug("Loaded GrpcRoute: %s", self.grpc_route)
716  return resource
717 
718  def delete_grpc_route(self, force=False):
719  if force:
720  name = self.make_resource_name(self.GRPC_ROUTE_NAME)
721  elif self.grpc_route:
722  name = self.grpc_route.name
723  else:
724  return
725  logger.info('Deleting GrpcRoute %s', name)
726  self.netsvc.delete_grpc_route(name)
727  self.grpc_route = None
728 
729  def cleanup(self, *, force=False):
730  self.delete_grpc_route(force=force)
731  self.delete_mesh(force=force)
732  super().cleanup(force=force)
733 
734 
736  SERVER_TLS_POLICY_NAME = "server-tls-policy"
737  CLIENT_TLS_POLICY_NAME = "client-tls-policy"
738  AUTHZ_POLICY_NAME = "authz-policy"
739  ENDPOINT_POLICY = "endpoint-policy"
740  CERTIFICATE_PROVIDER_INSTANCE = "google_cloud_private_spiffe"
741 
742  netsec: _NetworkSecurityV1Beta1
743  netsvc: _NetworkServicesV1Beta1
744 
745  def __init__(
746  self,
747  gcp_api_manager: gcp.api.GcpApiManager,
748  project: str,
749  *,
750  resource_prefix: str,
751  resource_suffix: Optional[str] = None,
752  network: str = 'default',
753  compute_api_version: str = 'v1',
754  ):
755  super().__init__(gcp_api_manager,
756  project,
757  resource_prefix=resource_prefix,
758  resource_suffix=resource_suffix,
759  network=network,
760  compute_api_version=compute_api_version)
761 
762  # API
763  self.netsec = _NetworkSecurityV1Beta1(gcp_api_manager, project)
764  self.netsvc = _NetworkServicesV1Beta1(gcp_api_manager, project)
765 
766  # Managed resources
767  self.server_tls_policy: Optional[ServerTlsPolicy] = None
768  self.client_tls_policy: Optional[ClientTlsPolicy] = None
769  self.authz_policy: Optional[AuthorizationPolicy] = None
770  self.endpoint_policy: Optional[EndpointPolicy] = None
771 
773  *,
774  server_namespace,
775  server_name,
776  server_port,
777  tls=True,
778  mtls=True):
779  self.create_server_tls_policy(tls=tls, mtls=mtls)
780  self.create_endpoint_policy(server_namespace=server_namespace,
781  server_name=server_name,
782  server_port=server_port)
783 
785  *,
786  server_namespace,
787  server_name,
788  tls=True,
789  mtls=True):
790  self.create_client_tls_policy(tls=tls, mtls=mtls)
791  self.backend_service_apply_client_mtls_policy(server_namespace,
792  server_name)
793 
794  def cleanup(self, *, force=False):
795  # Cleanup in the reverse order of creation
796  super().cleanup(force=force)
797  self.delete_endpoint_policy(force=force)
798  self.delete_server_tls_policy(force=force)
799  self.delete_client_tls_policy(force=force)
800  self.delete_authz_policy(force=force)
801 
802  def create_server_tls_policy(self, *, tls, mtls):
804  logger.info('Creating Server TLS Policy %s', name)
805  if not tls and not mtls:
806  logger.warning(
807  'Server TLS Policy %s neither TLS, nor mTLS '
808  'policy. Skipping creation', name)
809  return
810 
811  certificate_provider = self._get_certificate_provider()
812  policy = {}
813  if tls:
814  policy["serverCertificate"] = certificate_provider
815  if mtls:
816  policy["mtlsPolicy"] = {
817  "clientValidationCa": [certificate_provider],
818  }
819 
820  self.netsec.create_server_tls_policy(name, policy)
821  self.server_tls_policy = self.netsec.get_server_tls_policy(name)
822  logger.debug('Server TLS Policy loaded: %r', self.server_tls_policy)
823 
824  def delete_server_tls_policy(self, force=False):
825  if force:
827  elif self.server_tls_policy:
828  name = self.server_tls_policy.name
829  else:
830  return
831  logger.info('Deleting Server TLS Policy %s', name)
833  self.server_tls_policy = None
834 
835  def create_authz_policy(self, *, action: str, rules: list):
836  name = self.make_resource_name(self.AUTHZ_POLICY_NAME)
837  logger.info('Creating Authz Policy %s', name)
838  policy = {
839  "action": action,
840  "rules": rules,
841  }
842 
843  self.netsec.create_authz_policy(name, policy)
844  self.authz_policy = self.netsec.get_authz_policy(name)
845  logger.debug('Authz Policy loaded: %r', self.authz_policy)
846 
847  def delete_authz_policy(self, force=False):
848  if force:
849  name = self.make_resource_name(self.AUTHZ_POLICY_NAME)
850  elif self.authz_policy:
851  name = self.authz_policy.name
852  else:
853  return
854  logger.info('Deleting Authz Policy %s', name)
855  self.netsec.delete_authz_policy(name)
856  self.authz_policy = None
857 
858  def create_endpoint_policy(self, *, server_namespace: str, server_name: str,
859  server_port: int) -> None:
860  name = self.make_resource_name(self.ENDPOINT_POLICY)
861  logger.info('Creating Endpoint Policy %s', name)
862  endpoint_matcher_labels = [{
863  "labelName": "app",
864  "labelValue": f"{server_namespace}-{server_name}"
865  }]
866  port_selector = {"ports": [str(server_port)]}
867  label_matcher_all = {
868  "metadataLabelMatchCriteria": "MATCH_ALL",
869  "metadataLabels": endpoint_matcher_labels,
870  }
871  config = {
872  "type": "GRPC_SERVER",
873  "trafficPortSelector": port_selector,
874  "endpointMatcher": {
875  "metadataLabelMatcher": label_matcher_all,
876  },
877  }
878  if self.server_tls_policy:
879  config["serverTlsPolicy"] = self.server_tls_policy.name
880  else:
881  logger.warning(
882  'Creating Endpoint Policy %s with '
883  'no Server TLS policy attached', name)
884  if self.authz_policy:
885  config["authorizationPolicy"] = self.authz_policy.name
886 
887  self.netsvc.create_endpoint_policy(name, config)
888  self.endpoint_policy = self.netsvc.get_endpoint_policy(name)
889  logger.debug('Loaded Endpoint Policy: %r', self.endpoint_policy)
890 
891  def delete_endpoint_policy(self, force: bool = False) -> None:
892  if force:
893  name = self.make_resource_name(self.ENDPOINT_POLICY)
894  elif self.endpoint_policy:
895  name = self.endpoint_policy.name
896  else:
897  return
898  logger.info('Deleting Endpoint Policy %s', name)
899  self.netsvc.delete_endpoint_policy(name)
900  self.endpoint_policy = None
901 
902  def create_client_tls_policy(self, *, tls, mtls):
904  logger.info('Creating Client TLS Policy %s', name)
905  if not tls and not mtls:
906  logger.warning(
907  'Client TLS Policy %s neither TLS, nor mTLS '
908  'policy. Skipping creation', name)
909  return
910 
911  certificate_provider = self._get_certificate_provider()
912  policy = {}
913  if tls:
914  policy["serverValidationCa"] = [certificate_provider]
915  if mtls:
916  policy["clientCertificate"] = certificate_provider
917 
918  self.netsec.create_client_tls_policy(name, policy)
919  self.client_tls_policy = self.netsec.get_client_tls_policy(name)
920  logger.debug('Client TLS Policy loaded: %r', self.client_tls_policy)
921 
922  def delete_client_tls_policy(self, force=False):
923  if force:
925  elif self.client_tls_policy:
926  name = self.client_tls_policy.name
927  else:
928  return
929  logger.info('Deleting Client TLS Policy %s', name)
931  self.client_tls_policy = None
932 
934  self,
935  server_namespace,
936  server_name,
937  ):
938  if not self.client_tls_policy:
939  logger.warning(
940  'Client TLS policy not created, '
941  'skipping attaching to Backend Service %s',
942  self.backend_service.name)
943  return
944 
945  server_spiffe = (f'spiffe://{self.project}.svc.id.goog/'
946  f'ns/{server_namespace}/sa/{server_name}')
947  logging.info(
948  'Adding Client TLS Policy to Backend Service %s: %s, '
949  'server %s', self.backend_service.name, self.client_tls_policy.url,
950  server_spiffe)
951 
953  self.backend_service, {
954  'securitySettings': {
955  'clientTlsPolicy': self.client_tls_policy.url,
956  'subjectAltNames': [server_spiffe]
957  }
958  })
959 
960  @classmethod
962  return {
963  "certificateProviderInstance": {
964  "pluginInstance": cls.CERTIFICATE_PROVIDER_INSTANCE,
965  },
966  }
framework.infrastructure.traffic_director.TrafficDirectorManager.alternative_backend_service
alternative_backend_service
Definition: traffic_director.py:281
framework.infrastructure.traffic_director.TrafficDirectorSecureManager.netsec
netsec
Definition: traffic_director.py:754
xds_interop_client.str
str
Definition: xds_interop_client.py:487
framework.infrastructure.traffic_director.TrafficDirectorAppNetManager.netsvc
netsvc
Definition: traffic_director.py:653
framework.infrastructure.traffic_director.TrafficDirectorManager.backend_service_protocol
backend_service_protocol
Definition: traffic_director.py:208
framework.infrastructure.traffic_director.TrafficDirectorManager.delete_health_check
def delete_health_check(self, force=False)
Definition: traffic_director.py:183
framework.infrastructure.traffic_director.TrafficDirectorManager.backend_service_add_neg_backends
def backend_service_add_neg_backends(self, name, zones, Optional[int] max_rate_per_endpoint=None)
Definition: traffic_director.py:231
framework.infrastructure.traffic_director.TrafficDirectorManager.TARGET_PROXY_NAME
string TARGET_PROXY_NAME
Definition: traffic_director.py:63
framework.infrastructure.traffic_director.TrafficDirectorManager.ALTERNATIVE_URL_MAP_NAME
string ALTERNATIVE_URL_MAP_NAME
Definition: traffic_director.py:61
framework.infrastructure.traffic_director.TrafficDirectorAppNetManager
Definition: traffic_director.py:637
framework.infrastructure.traffic_director.TrafficDirectorManager.make_resource_name
str make_resource_name(self, str name)
Definition: traffic_director.py:159
framework.infrastructure.traffic_director.TrafficDirectorSecureManager.setup_server_security
def setup_server_security(self, *server_namespace, server_name, server_port, tls=True, mtls=True)
Definition: traffic_director.py:772
framework.infrastructure.traffic_director.TrafficDirectorManager.AFFINITY_BACKEND_SERVICE_NAME
string AFFINITY_BACKEND_SERVICE_NAME
Definition: traffic_director.py:58
framework.infrastructure.traffic_director.TrafficDirectorManager.setup_for_grpc
def setup_for_grpc(self, service_host, service_port, *Optional[BackendServiceProtocol] backend_protocol=_BackendGRPC, Optional[int] health_check_port=None)
Definition: traffic_director.py:120
framework.infrastructure.traffic_director.TrafficDirectorSecureManager.delete_authz_policy
def delete_authz_policy(self, force=False)
Definition: traffic_director.py:847
framework.infrastructure.traffic_director.TrafficDirectorManager.create_backend_service
def create_backend_service(self, Optional[BackendServiceProtocol] protocol=_BackendGRPC, Optional[int] subset_size=None, Optional[str] affinity_header=None, Optional[List[dict]] locality_lb_policies=None)
Definition: traffic_director.py:194
framework.infrastructure.traffic_director.TrafficDirectorSecureManager.CERTIFICATE_PROVIDER_INSTANCE
string CERTIFICATE_PROVIDER_INSTANCE
Definition: traffic_director.py:740
framework.infrastructure.traffic_director.TrafficDirectorManager.find_unused_forwarding_rule_port
int find_unused_forwarding_rule_port(self, *int lo=1024, int hi=65535, int attempts=25)
Definition: traffic_director.py:548
framework.infrastructure.traffic_director.TrafficDirectorManager.wait_for_alternative_backends_healthy_status
def wait_for_alternative_backends_healthy_status(self)
Definition: traffic_director.py:324
framework.infrastructure.traffic_director.TrafficDirectorManager.alternative_backend_service_remove_all_backends
def alternative_backend_service_remove_all_backends(self)
Definition: traffic_director.py:318
framework.infrastructure.traffic_director.TrafficDirectorManager.affinity_backend_service_remove_all_backends
def affinity_backend_service_remove_all_backends(self)
Definition: traffic_director.py:377
framework.infrastructure.traffic_director.TrafficDirectorSecureManager.delete_endpoint_policy
None delete_endpoint_policy(self, bool force=False)
Definition: traffic_director.py:891
framework.infrastructure.traffic_director.TrafficDirectorManager
Definition: traffic_director.py:51
framework.infrastructure.traffic_director.TrafficDirectorSecureManager.CLIENT_TLS_POLICY_NAME
string CLIENT_TLS_POLICY_NAME
Definition: traffic_director.py:737
capstone.range
range
Definition: third_party/bloaty/third_party/capstone/bindings/python/capstone/__init__.py:6
framework.infrastructure.traffic_director.TrafficDirectorManager.create_url_map_with_content
GcpResource create_url_map_with_content(self, Any url_map_body)
Definition: traffic_director.py:439
framework.infrastructure.traffic_director.TrafficDirectorAppNetManager.create_mesh
GcpResource create_mesh(self)
Definition: traffic_director.py:667
framework.infrastructure.gcp.network_services.EndpointPolicy
Definition: network_services.py:32
framework.infrastructure.traffic_director.TrafficDirectorManager.create_alternative_url_map
GcpResource create_alternative_url_map(self, str src_host, int src_port, Optional[GcpResource] backend_service=None)
Definition: traffic_director.py:456
framework.infrastructure.traffic_director.TrafficDirectorAppNetManager.delete_grpc_route
def delete_grpc_route(self, force=False)
Definition: traffic_director.py:718
framework.infrastructure.gcp.compute.ComputeV1
Definition: compute.py:29
framework.infrastructure.traffic_director.TrafficDirectorManager.delete_forwarding_rule
def delete_forwarding_rule(self, force=False)
Definition: traffic_director.py:573
framework.infrastructure.gcp.network_services.NetworkServicesV1Beta1
Definition: network_services.py:210
framework.infrastructure.traffic_director.TrafficDirectorManager.backend_service_remove_all_backends
def backend_service_remove_all_backends(self)
Definition: traffic_director.py:261
framework.infrastructure.traffic_director._NetworkServicesV1Alpha1
_NetworkServicesV1Alpha1
Definition: traffic_director.py:41
framework.infrastructure.traffic_director.TrafficDirectorManager.ALTERNATIVE_BACKEND_SERVICE_NAME
string ALTERNATIVE_BACKEND_SERVICE_NAME
Definition: traffic_director.py:57
framework.infrastructure.traffic_director.TrafficDirectorManager.target_proxy
target_proxy
Definition: traffic_director.py:500
framework.infrastructure.traffic_director.TrafficDirectorManager.create_target_proxy
def create_target_proxy(self)
Definition: traffic_director.py:485
framework.infrastructure.traffic_director.TrafficDirectorManager.alternative_backend_service_patch_backends
def alternative_backend_service_patch_backends(self)
Definition: traffic_director.py:311
framework.infrastructure.traffic_director.TrafficDirectorManager.affinity_backend_service_add_neg_backends
def affinity_backend_service_add_neg_backends(self, name, zones)
Definition: traffic_director.py:362
framework.infrastructure.traffic_director.TrafficDirectorManager.delete_alternative_target_grpc_proxy
def delete_alternative_target_grpc_proxy(self, force=False)
Definition: traffic_director.py:537
framework.infrastructure.traffic_director.TrafficDirectorManager.network_url
def network_url(self)
Definition: traffic_director.py:117
framework.infrastructure.traffic_director.TrafficDirectorSecureManager.create_authz_policy
def create_authz_policy(self, *str action, list rules)
Definition: traffic_director.py:835
framework.infrastructure.traffic_director.TrafficDirectorAppNetManager.GRPC_ROUTE_NAME
string GRPC_ROUTE_NAME
Definition: traffic_director.py:639
framework.infrastructure.gcp.network_security.AuthorizationPolicy
Definition: network_security.py:72
framework.infrastructure.traffic_director.TrafficDirectorSecureManager.SERVER_TLS_POLICY_NAME
string SERVER_TLS_POLICY_NAME
Definition: traffic_director.py:736
framework.infrastructure.traffic_director.TrafficDirectorManager.alternative_url_map
alternative_url_map
Definition: traffic_director.py:467
framework.infrastructure.traffic_director.TrafficDirectorManager.cleanup
def cleanup(self, *force=False)
Definition: traffic_director.py:144
framework.infrastructure.traffic_director.TrafficDirectorManager.forwarding_rule
forwarding_rule
Definition: traffic_director.py:570
framework.infrastructure.traffic_director.TrafficDirectorManager.patch_url_map
def patch_url_map(self, str src_host, int src_port, GcpResource backend_service)
Definition: traffic_director.py:427
framework.infrastructure.traffic_director.TrafficDirectorSecureManager.setup_client_security
def setup_client_security(self, *server_namespace, server_name, tls=True, mtls=True)
Definition: traffic_director.py:784
framework.infrastructure.gcp.network_security.ServerTlsPolicy
Definition: network_security.py:32
framework.infrastructure.gcp.network_security.NetworkSecurityV1Beta1
Definition: network_security.py:124
framework.infrastructure.traffic_director.TrafficDirectorManager.load_affinity_backend_service
def load_affinity_backend_service(self)
Definition: traffic_director.py:346
framework.infrastructure.traffic_director.TrafficDirectorManager.load_backend_service
def load_backend_service(self)
Definition: traffic_director.py:215
framework.infrastructure.traffic_director.TrafficDirectorManager.HEALTH_CHECK_NAME
string HEALTH_CHECK_NAME
Definition: traffic_director.py:59
xds_interop_client.int
int
Definition: xds_interop_client.py:113
framework.infrastructure.traffic_director.TrafficDirectorSecureManager.__init__
def __init__(self, gcp.api.GcpApiManager gcp_api_manager, str project, *str resource_prefix, Optional[str] resource_suffix=None, str network='default', str compute_api_version='v1')
Definition: traffic_director.py:745
framework.infrastructure.traffic_director.TrafficDirectorAppNetManager.delete_mesh
def delete_mesh(self, force=False)
Definition: traffic_director.py:676
framework.infrastructure.traffic_director.TrafficDirectorSecureManager._get_certificate_provider
def _get_certificate_provider(cls)
Definition: traffic_director.py:961
framework.infrastructure.traffic_director.TrafficDirectorManager.BACKEND_SERVICE_NAME
string BACKEND_SERVICE_NAME
Definition: traffic_director.py:56
framework.infrastructure.traffic_director.TrafficDirectorSecureManager.backend_service_apply_client_mtls_policy
def backend_service_apply_client_mtls_policy(self, server_namespace, server_name)
Definition: traffic_director.py:933
run_xds_tests.patch_backend_service
def patch_backend_service(gcp, backend_service, instance_groups, balancing_mode='UTILIZATION', max_rate=1, circuit_breakers=None)
Definition: run_xds_tests.py:2942
framework.infrastructure.traffic_director.TrafficDirectorManager.health_check
health_check
Definition: traffic_director.py:177
framework.infrastructure.traffic_director.TrafficDirectorAppNetManager.MESH_NAME
string MESH_NAME
Definition: traffic_director.py:640
framework.infrastructure.traffic_director.TrafficDirectorManager.backend_service_patch_backends
def backend_service_patch_backends(self, Optional[int] max_rate_per_endpoint=None)
Definition: traffic_director.py:253
framework.infrastructure.traffic_director.TrafficDirectorAppNetManager.create_grpc_route_with_content
GcpResource create_grpc_route_with_content(self, Any body)
Definition: traffic_director.py:710
framework.infrastructure.traffic_director.TrafficDirectorManager.create_alternative_target_proxy
def create_alternative_target_proxy(self)
Definition: traffic_director.py:526
framework.infrastructure.traffic_director.TrafficDirectorManager.delete_affinity_backend_service
def delete_affinity_backend_service(self, force=False)
Definition: traffic_director.py:351
framework.infrastructure.traffic_director.TrafficDirectorManager.URL_MAP_NAME
string URL_MAP_NAME
Definition: traffic_director.py:60
framework.infrastructure.traffic_director.TrafficDirectorManager.create_alternative_forwarding_rule
def create_alternative_forwarding_rule(self, int src_port, ip_address='0.0.0.0')
Definition: traffic_director.py:584
framework.infrastructure.traffic_director.TrafficDirectorSecureManager.authz_policy
authz_policy
Definition: traffic_director.py:844
framework.infrastructure.traffic_director.TrafficDirectorManager.wait_for_backends_healthy_status
def wait_for_backends_healthy_status(self)
Definition: traffic_director.py:266
framework.infrastructure.traffic_director.TrafficDirectorManager.target_proxy_is_http
target_proxy_is_http
Definition: traffic_director.py:490
framework.infrastructure.traffic_director.TrafficDirectorManager.ALTERNATIVE_TARGET_PROXY_NAME
string ALTERNATIVE_TARGET_PROXY_NAME
Definition: traffic_director.py:64
framework.infrastructure.traffic_director._NetworkServicesV1Beta1
_NetworkServicesV1Beta1
Definition: traffic_director.py:42
framework.infrastructure.traffic_director.TrafficDirectorManager.alternative_backend_service_add_neg_backends
def alternative_backend_service_add_neg_backends(self, name, zones)
Definition: traffic_director.py:302
framework.infrastructure.traffic_director.TrafficDirectorSecureManager.netsvc
netsvc
Definition: traffic_director.py:755
framework.infrastructure
Definition: tools/run_tests/xds_k8s_test_driver/framework/infrastructure/__init__.py:1
framework.infrastructure.traffic_director.TrafficDirectorAppNetManager.grpc_route
grpc_route
Definition: traffic_director.py:706
framework.infrastructure.traffic_director.TrafficDirectorSecureManager.delete_client_tls_policy
def delete_client_tls_policy(self, force=False)
Definition: traffic_director.py:922
framework.infrastructure.traffic_director.TrafficDirectorSecureManager.AUTHZ_POLICY_NAME
string AUTHZ_POLICY_NAME
Definition: traffic_director.py:738
framework.infrastructure.traffic_director.TrafficDirectorManager.wait_for_affinity_backends_healthy_status
def wait_for_affinity_backends_healthy_status(self)
Definition: traffic_director.py:383
framework.infrastructure.traffic_director.TrafficDirectorManager.affinity_backend_service_protocol
affinity_backend_service_protocol
Definition: traffic_director.py:343
framework.infrastructure.traffic_director.TrafficDirectorManager.alternative_forwarding_rule
alternative_forwarding_rule
Definition: traffic_director.py:597
framework.infrastructure.traffic_director.TrafficDirectorManager.affinity_backend_service
affinity_backend_service
Definition: traffic_director.py:342
framework.infrastructure.gcp.network_services.GrpcRoute
Definition: network_services.py:74
add
static void add(const char *beg, const char *end, char ***ss, size_t *ns)
Definition: debug/trace.cc:96
framework.infrastructure.traffic_director.TrafficDirectorManager.create_health_check
def create_health_check(self, *Optional[HealthCheckProtocol] protocol=_HealthCheckGRPC, Optional[int] port=None)
Definition: traffic_director.py:167
framework.infrastructure.gcp.network_services.Mesh
Definition: network_services.py:58
framework.infrastructure.traffic_director.TrafficDirectorManager.create_forwarding_rule
def create_forwarding_rule(self, int src_port)
Definition: traffic_director.py:561
framework.infrastructure.traffic_director.TrafficDirectorManager.setup_backend_for_grpc
def setup_backend_for_grpc(self, *Optional[BackendServiceProtocol] protocol=_BackendGRPC, Optional[int] health_check_port=None)
Definition: traffic_director.py:131
framework.infrastructure.traffic_director.TrafficDirectorManager.URL_MAP_PATH_MATCHER_NAME
string URL_MAP_PATH_MATCHER_NAME
Definition: traffic_director.py:62
framework.infrastructure.traffic_director.TrafficDirectorAppNetManager.create_grpc_route
GcpResource create_grpc_route(self, str src_host, int src_port)
Definition: traffic_director.py:687
framework.infrastructure.traffic_director.TrafficDirectorSecureManager.create_server_tls_policy
def create_server_tls_policy(self, *tls, mtls)
Definition: traffic_director.py:802
framework.infrastructure.traffic_director.TrafficDirectorManager.backend_service_remove_neg_backends
def backend_service_remove_neg_backends(self, name, zones)
Definition: traffic_director.py:244
framework.infrastructure.traffic_director.TrafficDirectorManager.backend_service
backend_service
Definition: traffic_director.py:207
framework.infrastructure.traffic_director.TrafficDirectorManager.delete_firewall_rule
def delete_firewall_rule(self, force=False)
Definition: traffic_director.py:624
framework.infrastructure.traffic_director.TrafficDirectorSecureManager.create_client_tls_policy
def create_client_tls_policy(self, *tls, mtls)
Definition: traffic_director.py:902
framework.infrastructure.traffic_director.TrafficDirectorManager.delete_backend_service
def delete_backend_service(self, force=False)
Definition: traffic_director.py:220
framework.infrastructure.traffic_director.TrafficDirectorManager.alternative_backend_service_protocol
alternative_backend_service_protocol
Definition: traffic_director.py:282
framework.infrastructure.traffic_director.TrafficDirectorManager.alternative_target_proxy
alternative_target_proxy
Definition: traffic_director.py:532
framework.infrastructure.traffic_director.TrafficDirectorAppNetManager.cleanup
def cleanup(self, *force=False)
Definition: traffic_director.py:729
framework.infrastructure.traffic_director._NetworkSecurityV1Beta1
_NetworkSecurityV1Beta1
Definition: traffic_director.py:35
framework.infrastructure.traffic_director.TrafficDirectorManager.setup_routing_rule_map_for_grpc
def setup_routing_rule_map_for_grpc(self, service_host, service_port)
Definition: traffic_director.py:139
framework.infrastructure.traffic_director._ComputeV1
_ComputeV1
Definition: traffic_director.py:26
framework.infrastructure.traffic_director.TrafficDirectorManager.firewall_rule
firewall_rule
Definition: traffic_director.py:622
framework.infrastructure.traffic_director.TrafficDirectorManager.affinity_backend_service_patch_backends
def affinity_backend_service_patch_backends(self)
Definition: traffic_director.py:371
cpp.gmock_class.set
set
Definition: bloaty/third_party/googletest/googlemock/scripts/generator/cpp/gmock_class.py:44
framework.infrastructure.traffic_director.TrafficDirectorSecureManager.endpoint_policy
endpoint_policy
Definition: traffic_director.py:887
framework.infrastructure.traffic_director.TrafficDirectorManager.delete_alternative_backend_service
def delete_alternative_backend_service(self, force=False)
Definition: traffic_director.py:290
framework.infrastructure.traffic_director.TrafficDirectorSecureManager.delete_server_tls_policy
def delete_server_tls_policy(self, force=False)
Definition: traffic_director.py:824
framework.infrastructure.traffic_director.TrafficDirectorManager.delete_target_grpc_proxy
def delete_target_grpc_proxy(self, force=False)
Definition: traffic_director.py:502
framework.infrastructure.traffic_director.TrafficDirectorManager.delete_alternative_url_map
def delete_alternative_url_map(self, force=False)
Definition: traffic_director.py:474
framework.infrastructure.traffic_director.TrafficDirectorSecureManager
Definition: traffic_director.py:735
framework.infrastructure.traffic_director.TrafficDirectorManager.create_firewall_rule
def create_firewall_rule(self, List[str] allowed_ports)
Definition: traffic_director.py:614
framework.infrastructure.traffic_director.TrafficDirectorManager.ALTERNATIVE_FORWARDING_RULE_NAME
string ALTERNATIVE_FORWARDING_RULE_NAME
Definition: traffic_director.py:66
framework.infrastructure.gcp.network_services.NetworkServicesV1Alpha1
Definition: network_services.py:236
framework.infrastructure.traffic_director.TrafficDirectorSecureManager.create_endpoint_policy
None create_endpoint_policy(self, *str server_namespace, str server_name, int server_port)
Definition: traffic_director.py:858
framework.infrastructure.traffic_director.TrafficDirectorManager.load_alternative_backend_service
def load_alternative_backend_service(self)
Definition: traffic_director.py:285
framework.infrastructure.traffic_director.TrafficDirectorAppNetManager.__init__
def __init__(self, gcp.api.GcpApiManager gcp_api_manager, str project, *str resource_prefix, Optional[str] resource_suffix=None, str network='default', str compute_api_version='v1')
Definition: traffic_director.py:644
framework.infrastructure.traffic_director.TrafficDirectorManager.create_alternative_backend_service
def create_alternative_backend_service(self, Optional[BackendServiceProtocol] protocol=_BackendGRPC)
Definition: traffic_director.py:273
framework.infrastructure.traffic_director.TrafficDirectorSecureManager.ENDPOINT_POLICY
string ENDPOINT_POLICY
Definition: traffic_director.py:739
framework.infrastructure.traffic_director.TrafficDirectorManager.FIREWALL_RULE_NAME
string FIREWALL_RULE_NAME
Definition: traffic_director.py:67
framework.infrastructure.gcp.network_security.ClientTlsPolicy
Definition: network_security.py:52
framework.infrastructure.traffic_director.TrafficDirectorManager.FORWARDING_RULE_NAME
string FORWARDING_RULE_NAME
Definition: traffic_director.py:65
framework.infrastructure.traffic_director.TrafficDirectorSecureManager.client_tls_policy
client_tls_policy
Definition: traffic_director.py:919
framework.infrastructure.traffic_director.TrafficDirectorManager.delete_alternative_forwarding_rule
def delete_alternative_forwarding_rule(self, force=False)
Definition: traffic_director.py:602
cleanup
Definition: cleanup.py:1
framework.infrastructure.traffic_director.TrafficDirectorManager.url_map
url_map
Definition: traffic_director.py:424
framework.infrastructure.traffic_director.TrafficDirectorManager.delete_url_map
def delete_url_map(self, force=False)
Definition: traffic_director.py:445
framework.infrastructure.traffic_director.TrafficDirectorSecureManager.server_tls_policy
server_tls_policy
Definition: traffic_director.py:821
framework.infrastructure.traffic_director.TrafficDirectorManager.compute
compute
Definition: traffic_director.py:71
framework.infrastructure.traffic_director.TrafficDirectorManager._generate_url_map_body
Dict[str, Any] _generate_url_map_body(str name, str matcher_name, src_hosts, GcpResource dst_default_backend_service, Optional[GcpResource] dst_host_rule_match_backend_service=None)
Definition: traffic_director.py:391
framework.infrastructure.traffic_director.TrafficDirectorManager.delete_target_http_proxy
def delete_target_http_proxy(self, force=False)
Definition: traffic_director.py:514
framework.infrastructure.traffic_director.TrafficDirectorManager.create_affinity_backend_service
def create_affinity_backend_service(self, Optional[BackendServiceProtocol] protocol=_BackendGRPC)
Definition: traffic_director.py:331
framework.infrastructure.traffic_director.TrafficDirectorSecureManager.cleanup
def cleanup(self, *force=False)
Definition: traffic_director.py:794
framework.infrastructure.traffic_director.TrafficDirectorAppNetManager.mesh
mesh
Definition: traffic_director.py:672
framework.infrastructure.traffic_director.TrafficDirectorManager.create_url_map
GcpResource create_url_map(self, str src_host, int src_port)
Definition: traffic_director.py:415
framework.infrastructure.traffic_director.TrafficDirectorManager.__init__
def __init__(self, gcp.api.GcpApiManager gcp_api_manager, str project, *str resource_prefix, str resource_suffix, str network='default', str compute_api_version='v1')
Definition: traffic_director.py:69


grpc
Author(s):
autogenerated on Fri May 16 2025 03:00:40