def __init__()

in perfkitbenchmarker/providers/gcp/gce_network.py [0:0]


  def __init__(self, network_spec: GceNetworkSpec):
    super().__init__(network_spec)
    self.project: str | None = network_spec.project
    self.vpn_gateway: Dict[str, GceVpnGateway] = {}

    #  Figuring out the type of network here.
    #  Precedence: User Managed > MULTI > SINGLE > DEFAULT
    self.net_type = network.NetType.DEFAULT.value
    self.cidr = NETWORK_RANGE
    if FLAGS.gce_subnet_region:
      self.net_type = network.NetType.SINGLE.value
      self.cidr = FLAGS.gce_subnet_addr
    if network_spec.cidr:
      self.net_type = network.NetType.MULTI.value
      self.cidr = network_spec.cidr
    self.mtu = network_spec.mtu

    # TODO(user): Create separate Network objects for each network name.
    self.is_existing_network = True
    self.subnet_names = []
    self.primary_subnet_name = None
    if network_spec.subnet_names:
      self.subnet_names = network_spec.subnet_names
    elif gcp_flags.GCE_NETWORK_NAMES.value:
      self.subnet_names = gcp_flags.GCE_NETWORK_NAMES.value
    else:
      self.subnet_names = self._MakeGceNetworkName()
      self.is_existing_network = False
    if not isinstance(self.subnet_names, list):
      self.subnet_names = [self.subnet_names]
    self.primary_subnet_name = self.subnet_names[0]

    self.network_resources = []
    self.subnet_resources = []
    mode = gcp_flags.GCE_NETWORK_TYPE.value
    self.subnet_resource = None
    if not self.is_existing_network or mode == 'legacy':
      for name in self.subnet_names:
        self.network_resources.append(
            GceNetworkResource(name, mode, self.project, self.mtu)
        )
    if (self.is_existing_network and mode != 'legacy') or (mode == 'custom'):
      subnet_region = util.GetRegionFromZone(network_spec.zone)
      for name in self.subnet_names:
        self.subnet_resources.append(
            GceSubnetResource(
                name, name, subnet_region, self.cidr, self.project
            )
        )
      self.subnet_resource = GceSubnetResource(
          self.primary_subnet_name,
          self.primary_subnet_name,
          subnet_region,
          self.cidr,
          self.project,
      )
    self.network_resource = GceNetworkResource(
        self.primary_subnet_name, mode, self.project, self.mtu
    )
    # Stage FW rules.
    self.all_nets = self._GetNetworksFromSpec(
        network_spec
    )  # Holds the different networks in this run.
    # Holds FW rules for any external subnets.
    self.external_nets_rules: Dict[str, GceFirewallRule] = {}

    #  Set the default rule to allow all traffic within this network's subnet.
    firewall_name = self._MakeGceFWRuleName()
    self.default_firewall_rule = GceFirewallRule(
        firewall_name,
        self.project,
        ALLOW_ALL,
        self.primary_subnet_name,
        self.cidr,
    )

    # Set external rules to allow traffic from other subnets in this benchmark.
    for ext_net in self.all_nets:
      if ext_net == self.cidr:
        continue  # We've already added our own network to the default rule.
      rule_name = self._MakeGceFWRuleName(dst_cidr=ext_net)
      self.external_nets_rules[rule_name] = GceFirewallRule(
          rule_name, self.project, ALLOW_ALL, self.primary_subnet_name, ext_net
      )

    # Add VpnGateways to the network.
    if FLAGS.use_vpn:
      for gatewaynum in range(0, FLAGS.vpn_service_gateway_count):
        vpn_gateway_name = 'vpngw-%s-%s-%s' % (
            util.GetRegionFromZone(network_spec.zone),
            gatewaynum,
            FLAGS.run_uri,
        )
        self.vpn_gateway[vpn_gateway_name] = GceVpnGateway(
            vpn_gateway_name,
            self.primary_subnet_name,
            util.GetRegionFromZone(network_spec.zone),
            network_spec.cidr,
            self.project,
        )

    # Placement Group
    no_placement_group = (
        not FLAGS.placement_group_style
        or FLAGS.placement_group_style == placement_group.PLACEMENT_GROUP_NONE
    )
    has_optional_pg = (
        FLAGS.placement_group_style
        == placement_group.PLACEMENT_GROUP_CLOSEST_SUPPORTED
    )
    if no_placement_group:
      self.placement_group = None
    elif has_optional_pg and not IsPlacementGroupCompatible(
        network_spec.machine_type
    ):
      logging.warning(
          'machine type %s does not support placement groups. '
          'Placement group style set to none.',
          network_spec.machine_type,
      )
      self.placement_group = None
    elif has_optional_pg and len(set(FLAGS.zone)) > 1:
      logging.warning(
          'inter-zone/inter-region tests do not support placement groups. '
          'Placement group style set to none.'
      )
      self.placement_group = None
    elif not IsPlacementGroupCompatible(network_spec.machine_type):
      raise errors.Benchmarks.UnsupportedConfigError(
          f'machine type {network_spec.machine_type} does not support '
          'placement groups. Use placement group style none.'
      )
    elif len(set(FLAGS.zone)) > 1:
      raise errors.Benchmarks.UnsupportedConfigError(
          'inter-zone/inter-region tests do not support placement groups. '
          'Use placement group style closest_supported.'
      )
    else:
      placement_group_spec = gce_placement_group.GcePlacementGroupSpec(
          'GcePlacementGroupSpec',
          flag_values=FLAGS,
          zone=network_spec.zone,
          project=self.project,
          num_vms=self._GetNumberVms(),
      )
      self.placement_group = gce_placement_group.GcePlacementGroup(
          placement_group_spec
      )