topology

package
v0.6.3-alpha.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 19, 2025 License: Apache-2.0 Imports: 21 Imported by: 0

Documentation

Index

Constants

View Source
const (
	ParentTypeKey = "parent"
	ChildTypeKey  = "child"
)

Variables

This section is empty.

Functions

func GVRNamespaced

func GVRNamespaced(gvr schema.GroupVersionResource, discoveryClient discovery.DiscoveryClient) bool

GVRNamespaced returns true if a given GVR is namespaced based on the result of discovery client

func GetByJSONPath

func GetByJSONPath(
	ctx context.Context,
	relatedResList *unstructured.UnstructuredList,
	relationshipType string,
	client dynamic.Interface,
	obj unstructured.Unstructured,
	relation *Relationship,
	relatedGVK schema.GroupVersionKind,
	objResourceNode ResourceGraphNode,
	relationshipGraph graph.Graph[string, RelationshipGraphNode],
	resourceGraph graph.Graph[string, ResourceGraphNode],
) (graph.Graph[string, ResourceGraphNode], error)

GetByJSONPath retrieves related resources based on JSON path from a given list of unstructured resources.

func GetByLabelSelector

func GetByLabelSelector(
	ctx context.Context,
	relatedResList *unstructured.UnstructuredList,
	relationshipType string,
	client dynamic.Interface,
	obj unstructured.Unstructured,
	relation *Relationship,
	relatedGVK schema.GroupVersionKind,
	objResourceNode ResourceGraphNode,
	relationshipGraph graph.Graph[string, RelationshipGraphNode],
	resourceGraph graph.Graph[string, ResourceGraphNode],
) (graph.Graph[string, ResourceGraphNode], error)

GetByLabelSelector retrieves related resources based on label selectors from a given list of unstructured resources.

func GetChildResourcesList

func GetChildResourcesList(ctx context.Context, client dynamic.Interface, childRelation *Relationship, namespace string) (*unstructured.UnstructuredList, error)

GetChildResourcesList returns an *unstructured.UnstructuredList representing all resources that matches the child GVK in the current namespace

func GetChildren

func GetChildren(
	ctx context.Context,
	client dynamic.Interface,
	obj unstructured.Unstructured,
	childRelation *Relationship,
	namespace, objName string,
	objResourceNode ResourceGraphNode,
	relationshipGraph graph.Graph[string, RelationshipGraphNode],
	resourceGraph graph.Graph[string, ResourceGraphNode],
) (graph.Graph[string, ResourceGraphNode], error)

GetChildren returns a graph that includes all of the child resources for the current obj that are described by the childRelation

func GetChildrenByOwnerReference

func GetChildrenByOwnerReference(
	ctx context.Context,
	childResList *unstructured.UnstructuredList,
	client dynamic.Interface,
	obj unstructured.Unstructured,
	childGVK schema.GroupVersionKind,
	relationshipGraph graph.Graph[string, RelationshipGraphNode],
	resourceGraph graph.Graph[string, ResourceGraphNode],
) (graph.Graph[string, ResourceGraphNode], error)

GetChildrenByOwnerReference returns a graph that includes all of the child resources for the current obj described by their children's OwnerReferences field

func GetParentResourcesList

func GetParentResourcesList(ctx context.Context, client dynamic.Interface, parentRelation *Relationship, namespace string) (*unstructured.UnstructuredList, error)

GetParentResourcesList returns an *unstructured.UnstructuredList representing all resources that matches the parent GVK in the current namespace

func GetParents

func GetParents(
	ctx context.Context,
	client dynamic.Interface,
	obj unstructured.Unstructured,
	parentRelation *Relationship,
	namespace, objName string,
	objResourceNode ResourceGraphNode,
	relationshipGraph graph.Graph[string, RelationshipGraphNode],
	resourceGraph graph.Graph[string, ResourceGraphNode],
) (graph.Graph[string, ResourceGraphNode], error)

GetParents returns a graph that includes all of the parent resources for the current obj that are described by the parentRelation

func GetParentsByOwnerReference

func GetParentsByOwnerReference(
	ctx context.Context,
	client dynamic.Interface,
	obj unstructured.Unstructured,
	objResourceNode ResourceGraphNode,
	relationshipGraph graph.Graph[string, RelationshipGraphNode],
	resourceGraph graph.Graph[string, ResourceGraphNode],
) (graph.Graph[string, ResourceGraphNode], error)

GetParentsByOwnerReference returns a graph that includes all of the parent resources for the current obj described by its OwnerReferences field

func RelationshipEquals

func RelationshipEquals(r, relation *Relationship) bool

RelationshipEquals returns true if two relationships are equal

Types

type Relationship

type Relationship struct {
	ParentNode    *RelationshipGraphNode
	ChildNode     *RelationshipGraphNode
	AutoGenerated bool
	Group         string              `json:"group,omitempty" yaml:"group,omitempty"`
	Version       string              `json:"version,omitempty" yaml:"version,omitempty"`
	Kind          string              `json:"kind,omitempty" yaml:"kind,omitempty"`
	ClusterScoped bool                `json:"clusterScoped,omitempty" yaml:"clusterScoped,omitempty"`
	Type          string              `json:"type,omitempty" yaml:"type,omitempty"`
	SelectorPath  string              `json:"selectorPath,omitempty" yaml:"selectorPath,omitempty"`
	JSONPath      []map[string]string `json:"jsonPath,omitempty" yaml:"jsonPath,omitempty"`
}

Relationship represents a connection between parent and child nodes in the relationship graph.

func InsertIfNotExist

func InsertIfNotExist(relationList []*Relationship, relation Relationship, relationshipDirection string) ([]*Relationship, error)

InsertIfNotExist inserts relation into relationList only if it does not exist already This is used to auto-generate two-way relationships when they are not declared explicitly

func (Relationship) GetHash

func (r Relationship) GetHash() string

GetHash method returns the hash of the relationship.

type RelationshipGraph

type RelationshipGraph struct {
	RelationshipNodes []*RelationshipGraphNode `json:"relationship,omitempty" yaml:"relationship,omitempty"`
}

RelationshipGraph represents the graph structure containing the relationships between nodes.

func BuildBuiltinRelationshipGraph

func BuildBuiltinRelationshipGraph(ctx context.Context, client dynamic.Interface) (graph.Graph[string, RelationshipGraphNode], *RelationshipGraph, error)

BuildBuiltinRelationshipGraph returns the relationship graph built from the YAML describing resource relationships

func BuildRelationshipGraph

BuildRelationshipGraph builds the complete relationship graph including the built-in one and customer-specified one

func (*RelationshipGraph) CountRelationshipGraph

func (rg *RelationshipGraph) CountRelationshipGraph(ctx context.Context, dynamicClient dynamic.Interface, discoveryClient *discovery.DiscoveryClient, countNamespace string) (*RelationshipGraph, error)

CountRelationshipGraph returns the same RelationshipGraph with the count for each resource

func (*RelationshipGraph) CountRelationshipGraphByCustomResourceGroup

func (rg *RelationshipGraph) CountRelationshipGraphByCustomResourceGroup(ctx context.Context, cl storage.SearchStorage, resourceGroup *entity.ResourceGroup, name string) (*RelationshipGraph, error)

CountRelationshipGraphByCustomResourceGroup returns the same RelationshipGraph with the count for each custom resource group

func (*RelationshipGraph) FindNodeByGVK

func (rg *RelationshipGraph) FindNodeByGVK(group, version, kind string) (*RelationshipGraphNode, error)

FindNodeByGVK locates the Node by GVK on a RelationshipGraph. Used to locate parent and child nodes when building the relationship graph

type RelationshipGraphNode

type RelationshipGraphNode struct {
	Group         string          `json:"group,omitempty" yaml:"group,omitempty"`
	Version       string          `json:"version,omitempty" yaml:"version,omitempty"`
	Kind          string          `json:"kind,omitempty" yaml:"kind,omitempty"`
	Parent        []*Relationship `json:"parent,omitempty" yaml:"parent,omitempty"`
	Children      []*Relationship `json:"children,omitempty" yaml:"children,omitempty"`
	ResourceCount int             `json:"resourceCount,omitempty" yaml:"resourceCount,omitempty"`
}

RelationshipGraphNode represents a node in the relationship graph.

func FindNodeOnGraph

func FindNodeOnGraph(g graph.Graph[string, RelationshipGraphNode], group, version, kind string) (*RelationshipGraphNode, error)

FindNodeOnGraph locates the Node on a built relationship graph. Used to locate parent and child nodes when traversing the relationship graph

func (RelationshipGraphNode) ConvertToMap

func (rgn RelationshipGraphNode) ConvertToMap() map[string]string

ConvertToMap method converts the relationship graph node to a map[string]string.

func (RelationshipGraphNode) GetHash

func (rgn RelationshipGraphNode) GetHash() string

GetHash method returns the hash of the relationship graph node.

type ResourceGraphNode

type ResourceGraphNode struct {
	Name      string
	Namespace string
	Group     string
	Version   string
	Kind      string
	Parent    []*ResourceGraphNode
	Children  []*ResourceGraphNode
}

ResourceGraphNode represents a node in the resource graph, containing resource-specific information.

func (ResourceGraphNode) GetHash

func (rgn ResourceGraphNode) GetHash() string

GetHash method returns the hash of the resource graph node.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL