Skip to content

Commit

Permalink
feat: Support CSIStorageCapacity relationships
Browse files Browse the repository at this point in the history
Signed-off-by: Justin Toh <[email protected]>
  • Loading branch information
tohjustin committed Oct 16, 2021
1 parent b329c16 commit 6d92686
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 1 deletion.
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -90,8 +90,9 @@ List of supported relationships used for discovering dependent objects:
- [ClusterRole References](https://kubernetes.io/docs/reference/kubernetes-api/authorization-resources/cluster-role-v1/), [ClusterRoleBinding References](https://kubernetes.io/docs/reference/kubernetes-api/authorization-resources/cluster-role-binding-v1/), [Role References](https://kubernetes.io/docs/reference/kubernetes-api/authorization-resources/role-v1/) & [RoleBinding References](https://kubernetes.io/docs/reference/kubernetes-api/authorization-resources/role-binding-v1/)
- [Controller References](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/controller-ref.md) & [Owner References](https://kubernetes.io/docs/concepts/overview/working-with-objects/owners-dependents/)
- [CSINode References](https://kubernetes.io/docs/reference/kubernetes-api/config-and-storage-resources/csi-node-v1/)
- [CSIStorageCapacity References](https://kubernetes.io/docs/reference/kubernetes-api/config-and-storage-resources/csi-storage-capacity-v1beta1/)
- [Event References](https://kubernetes.io/docs/reference/kubernetes-api/cluster-resources/event-v1/)
- [Ingress References](https://kubernetes.io/docs/reference/kubernetes-api/service-resources/ingress-v1/) & [IngressClass Reference](https://kubernetes.io/docs/reference/kubernetes-api/service-resources/ingress-class-v1/)
- [Ingress References](https://kubernetes.io/docs/reference/kubernetes-api/service-resources/ingress-v1/) & [IngressClass References](https://kubernetes.io/docs/reference/kubernetes-api/service-resources/ingress-class-v1/)
- [MutatingWebhookConfiguration References](https://kubernetes.io/docs/reference/kubernetes-api/extend-resources/mutating-webhook-configuration-v1/) & [ValidatingWebhookConfiguration References](https://kubernetes.io/docs/reference/kubernetes-api/extend-resources/validating-webhook-configuration-v1/)
- [PersistentVolume References](https://kubernetes.io/docs/reference/kubernetes-api/config-and-storage-resources/persistent-volume-v1/) & [PersistentVolumeClaim References](https://kubernetes.io/docs/reference/kubernetes-api/config-and-storage-resources/persistent-volume-claim-v1/)
- [Pod References](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/)
Expand Down
7 changes: 7 additions & 0 deletions internal/graph/graph.go
Original file line number Diff line number Diff line change
Expand Up @@ -556,6 +556,13 @@ func ResolveDependents(m meta.RESTMapper, objects []unstructuredv1.Unstructured,
klog.V(4).Infof("Failed to get relationships for csinode named \"%s\": %s: %s", node.Name, err)
continue
}
// Populate dependents based on CSIStorageCapacity relationships
case node.Group == "storage.k8s.io" && node.Kind == "CSIStorageCapacity":
rmap, err = getCSIStorageCapacityRelationships(node)
if err != nil {
klog.V(4).Infof("Failed to get relationships for csistoragecapacity named \"%s\": %s: %s", node.Name, err)
continue
}
// Populate dependents based on StorageClass relationships
case node.Group == "storage.k8s.io" && node.Kind == "StorageClass":
rmap, err = getStorageClassRelationships(node)
Expand Down
26 changes: 26 additions & 0 deletions internal/graph/kubernetes.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import (
policyv1beta1 "k8s.io/api/policy/v1beta1"
rbacv1 "k8s.io/api/rbac/v1"
storagev1 "k8s.io/api/storage/v1"
storagev1beta1 "k8s.io/api/storage/v1beta1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/runtime"
Expand All @@ -36,6 +37,9 @@ const (
// Kubernetes CSINode relationships.
RelationshipCSINodeDriver Relationship = "CSINodeDriver"

// Kubernetes CSIStorageCapacity relationships.
RelationshipCSIStorageCapacityStorageClass Relationship = "CSIStorageCapacityStorageClass"

// Kubernetes Event relationships.
RelationshipEventRegarding Relationship = "EventRegarding"
RelationshipEventRelated Relationship = "EventRelated"
Expand Down Expand Up @@ -221,6 +225,28 @@ func getCSINodeRelationships(n *Node) (*RelationshipMap, error) {
return &result, nil
}

// getCSIStorageCapacityRelationships returns a map of relationships that this
// CSIStorageCapacity has with other objects, based on what was referenced in
// its manifest.
func getCSIStorageCapacityRelationships(n *Node) (*RelationshipMap, error) {
var csisc storagev1beta1.CSIStorageCapacity
err := runtime.DefaultUnstructuredConverter.FromUnstructured(n.UnstructuredContent(), &csisc)
if err != nil {
return nil, err
}

var ref ObjectReference
result := newRelationshipMap()

// RelationshipCSIStorageCapacityStorageClass
if sc := csisc.StorageClassName; len(sc) > 0 {
ref = ObjectReference{Group: "storage.k8s.io", Kind: "StorageClass", Name: sc}
result.AddDependencyByKey(ref.Key(), RelationshipCSIStorageCapacityStorageClass)
}

return &result, nil
}

// getEventRelationships returns a map of relationships that this Event has with
// other objects, based on what was referenced in its manifest.
//nolint:unparam
Expand Down

0 comments on commit 6d92686

Please sign in to comment.