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
}