deprecated-oc-catalog/models/links.go

54 lines
1.5 KiB
Go
Raw Normal View History

2024-04-11 16:34:43 +02:00
package models
import (
2024-04-15 11:42:17 +02:00
"cloud.o-forge.io/core/oc-catalog/models/rtype"
2024-04-11 16:34:43 +02:00
)
type Link struct {
2024-04-15 11:42:17 +02:00
// ID primitive.ObjectID `json:"ID" bson:"_id" required:"true" example:"5099803df3f4948bd2f98391"`
Source string `json:"source" description:"id in the workflow of the source object"`
Destination string `json:"destination" description:"id in the workflow of the destination object"`
DCLink bool `json:"dcLink" description:"is this a link with a datacenter"`
2024-04-11 16:34:43 +02:00
}
2024-04-15 11:42:17 +02:00
// Use ResourceObject parameter to process certain components type differently
// and Id's to identify each component as a node in an oriented graph
2024-04-11 16:34:43 +02:00
// In the case of DCLink we choose to always consider the DC as the destination
// in order to facilitate some logic
2024-04-15 11:42:17 +02:00
func NewLink(src ResourceObject, srcId string, dst ResourceObject, dstId string) (link Link) {
2024-04-15 11:42:17 +02:00
link.Source = srcId
link.Destination = dstId
// If the link is between a DC and a component make sure that the DC is destination
// and if the component is computing, update the DataCenterID
2024-04-15 11:42:17 +02:00
if (src.getRtype() == rtype.DATACENTER || dst.getRtype() == rtype.DATACENTER){
var linked ResourceObject
2024-04-15 11:42:17 +02:00
link.DCLink = true
if src.getRtype() == rtype.DATACENTER {
linked = dst
} else {
linked = src
}
2024-04-15 11:42:17 +02:00
if( link.DCLink && src.getRtype() == rtype.DATACENTER){
link.Destination = srcId
link.Source = dstId
}
if (linked.getRtype() == rtype.COMPUTING){
linked.(*ComputingObject).DataCenterID = link.Destination
}
2024-04-15 11:42:17 +02:00
}
2024-04-11 16:34:43 +02:00
return
}
2024-07-04 15:57:28 +02:00
2024-04-11 16:34:43 +02:00