func ValidateVpcAccess()

in pkg/firebase/apphostingschema/vpcaccess.go [27:55]


func ValidateVpcAccess(vpcAccess *VpcAccess) error {
	if vpcAccess == nil {
		return nil
	}
	if vpcAccess.Egress != "" && !slices.Contains(validEgress, vpcAccess.Egress) {
		return fmt.Errorf("egress must be one of %v, got: %q", validEgress, vpcAccess.Egress)
	}
	if vpcAccess.Connector != "" && !fullyQualifiedConnector.MatchString(vpcAccess.Connector) && !resourceID.MatchString(vpcAccess.Connector) {
		return fmt.Errorf("connector must be fully qualified or an ID, got: %q", vpcAccess.Connector)
	}
	if vpcAccess.Connector == "" && len(vpcAccess.NetworkInterfaces) == 0 {
		return fmt.Errorf("one of connector or networkInterfaces must be set")
	}
	if vpcAccess.Connector != "" && len(vpcAccess.NetworkInterfaces) > 0 {
		return fmt.Errorf("connector and networkInterfaces cannot be set at the same time")
	}
	for _, ni := range vpcAccess.NetworkInterfaces {
		if ni.Network == "" && ni.Subnetwork == "" {
			return fmt.Errorf("at least one of network or subnetwork is required")
		}
		if ni.Network != "" && !fullyQualifiedNetwork.MatchString(ni.Network) && !resourceID.MatchString(ni.Network) {
			return fmt.Errorf("network must be fully qualified or an ID, got: %q", ni.Network)
		}
		if ni.Subnetwork != "" && !fullyQualifiedSubnetwork.MatchString(ni.Subnetwork) && !resourceID.MatchString(ni.Subnetwork) {
			return fmt.Errorf("subnetwork must be fully qualified or an ID, got: %q", ni.Subnetwork)
		}
	}
	return nil
}