func fetchInstanceInfo()

in internal/alloydb/refresh.go [55:93]


func fetchInstanceInfo(
	ctx context.Context, cl *alloydbadmin.AlloyDBAdminClient, inst InstanceURI,
) (i instanceInfo, err error) {
	var end tel.EndSpanFunc
	ctx, end = tel.StartSpan(ctx, "cloud.google.com/go/alloydbconn/internal.FetchMetadata")
	defer func() { end(err) }()
	req := &alloydbpb.GetConnectionInfoRequest{
		Parent: fmt.Sprintf(
			"projects/%s/locations/%s/clusters/%s/instances/%s",
			inst.project, inst.region, inst.cluster, inst.name,
		),
	}
	resp, err := cl.GetConnectionInfo(ctx, req)
	if err != nil {
		return instanceInfo{}, errtype.NewRefreshError(
			"failed to get instance metadata", inst.String(), err,
		)
	}

	// parse any ip addresses that might be used to connect
	ipAddrs := make(map[string]string)
	if addr := resp.GetIpAddress(); addr != "" {
		ipAddrs[PrivateIP] = addr
	}
	if addr := resp.GetPublicIpAddress(); addr != "" {
		ipAddrs[PublicIP] = addr
	}
	if addr := resp.GetPscDnsName(); addr != "" {
		ipAddrs[PSC] = addr
	}

	if len(ipAddrs) == 0 {
		return instanceInfo{}, errtype.NewConfigError(
			"cannot connect to instance - it has no supported IP addresses",
			inst.String(),
		)
	}
	return instanceInfo{ipAddrs: ipAddrs, uid: resp.InstanceUid}, nil
}