func()

in pkg/cloud/rgraph/rnode/forwardingrule/builder.go [68:118]


func (b *builder) OutRefs() ([]rnode.ResourceRef, error) {
	if b.resource == nil {
		return nil, nil
	}

	var ret []rnode.ResourceRef
	// Ignore conversion errors as the fields we care about are all available in GA.
	obj, _ := b.resource.ToGA()

	// IPAddress
	if obj.IPAddress != "" {
		if ip := net.ParseIP(obj.IPAddress); ip != nil {
			// Numeric IP address. This is an emphemeral address that does't
			// have a resource associated with it.
		} else {
			id, err := cloud.ParseResourceURL(obj.IPAddress)
			if err != nil {
				return nil, fmt.Errorf("ForwardingRuleNode IPAddress: %w", err)
			}
			ret = append(ret, rnode.ResourceRef{
				From: b.resource.ResourceID(),
				Path: api.Path{}.Pointer().Field("IPAddress"),
				To:   id,
			})
		}
	}

	// .BackendService, .Target
	for _, fieldSpec := range []struct {
		name string
		val  string
	}{
		{"BackendService", obj.BackendService},
		{"Target", obj.Target},
	} {
		if fieldSpec.val == "" {
			continue
		}
		id, err := cloud.ParseResourceURL(fieldSpec.val)
		if err != nil {
			return nil, fmt.Errorf("ForwardingRuleNode %s: %w", fieldSpec.name, err)
		}
		ret = append(ret, rnode.ResourceRef{
			From: b.resource.ResourceID(),
			Path: api.Path{}.Pointer().Field(fieldSpec.name),
			To:   id,
		})
	}

	return ret, nil
}