func()

in cli_tools/common/utils/param/network_resolver.go [58:94]


func (r *computeNetworkResolver) Resolve(
	originalNetwork, originalSubnet, region, project string) (network, subnet string, err error) {

	// 1. Segment the user's input into component fields such as network name, subnet name, project, and region.
	// If the URI in originalNetwork or originalSubnet didn't specify project or region, then backfill
	// those fields using region and project.
	networkResource, subnetResource, err := parseNetworkAndSubnet(originalNetwork, originalSubnet, region, project)
	if err != nil {
		return "", "", err
	}

	if networkResource.String() == "" && subnetResource.String() == "" {
		return "", "", nil
	}

	// 2. Query the Compute API to check whether the network and subnet exist.
	var subnetResponse *compute.Subnetwork
	var networkResponse *compute.Network
	if subnetResource.String() != "" {
		subnetResponse, err = r.client.GetSubnetwork(subnetResource.Project, subnetResource.Region, subnetResource.Name)
		if err != nil {
			return "", "", daisy.Errf("Validation of subnetwork %q failed: %s", subnetResource, err)
		}
	}
	if networkResource.String() != "" {
		networkResponse, err = r.client.GetNetwork(networkResource.Project, networkResource.Name)
		if err != nil {
			return "", "", daisy.Errf("Validation of network %q failed: %s", networkResource, err)
		}
	}

	// 3. Check whether the subnet's network matches the user's specified network.
	if subnetResponse != nil && networkResponse != nil && subnetResponse.Network != networkResponse.SelfLink {
		return "", "", daisy.Errf("Network %q does not contain subnet %q", networkResource, subnetResource)
	}
	return networkResource.String(), subnetResource.String(), err
}