mirror of https://github.com/fluxcd/cli-utils.git
				
				
				
			
		
			
				
	
	
		
			82 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Go
		
	
	
	
// Copyright 2022 The Kubernetes Authors.
 | 
						|
// SPDX-License-Identifier: Apache-2.0
 | 
						|
 | 
						|
package clusterreader
 | 
						|
 | 
						|
import (
 | 
						|
	"context"
 | 
						|
	"fmt"
 | 
						|
 | 
						|
	"k8s.io/apimachinery/pkg/api/meta"
 | 
						|
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
						|
	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
 | 
						|
	"k8s.io/apimachinery/pkg/labels"
 | 
						|
	"k8s.io/client-go/dynamic"
 | 
						|
	"sigs.k8s.io/controller-runtime/pkg/client"
 | 
						|
)
 | 
						|
 | 
						|
// DynamicClusterReader is an implementation of the ClusterReader that delegates
 | 
						|
// all calls directly to the underlying DynamicClient. No caching.
 | 
						|
type DynamicClusterReader struct {
 | 
						|
	DynamicClient dynamic.Interface
 | 
						|
	Mapper        meta.RESTMapper
 | 
						|
}
 | 
						|
 | 
						|
func (n *DynamicClusterReader) Get(ctx context.Context, key client.ObjectKey, obj *unstructured.Unstructured) error {
 | 
						|
	mapping, err := n.Mapper.RESTMapping(obj.GroupVersionKind().GroupKind())
 | 
						|
	if err != nil {
 | 
						|
		return fmt.Errorf("failed to map object: %w", err)
 | 
						|
	}
 | 
						|
 | 
						|
	serverObj, err := n.DynamicClient.Resource(mapping.Resource).
 | 
						|
		Namespace(key.Namespace).
 | 
						|
		Get(ctx, key.Name, metav1.GetOptions{})
 | 
						|
	if err != nil {
 | 
						|
		return err
 | 
						|
	}
 | 
						|
 | 
						|
	serverObj.DeepCopyInto(obj)
 | 
						|
	return nil
 | 
						|
}
 | 
						|
 | 
						|
func (n *DynamicClusterReader) ListNamespaceScoped(ctx context.Context, list *unstructured.UnstructuredList, namespace string, selector labels.Selector) error {
 | 
						|
	mapping, err := n.Mapper.RESTMapping(list.GroupVersionKind().GroupKind())
 | 
						|
	if err != nil {
 | 
						|
		return fmt.Errorf("failed to map object: %w", err)
 | 
						|
	}
 | 
						|
 | 
						|
	serverObj, err := n.DynamicClient.Resource(mapping.Resource).
 | 
						|
		Namespace(namespace).
 | 
						|
		List(ctx, metav1.ListOptions{
 | 
						|
			LabelSelector: selector.String(),
 | 
						|
		})
 | 
						|
	if err != nil {
 | 
						|
		return err
 | 
						|
	}
 | 
						|
 | 
						|
	serverObj.DeepCopyInto(list)
 | 
						|
	return nil
 | 
						|
}
 | 
						|
 | 
						|
func (n *DynamicClusterReader) ListClusterScoped(ctx context.Context, list *unstructured.UnstructuredList, selector labels.Selector) error {
 | 
						|
	mapping, err := n.Mapper.RESTMapping(list.GroupVersionKind().GroupKind())
 | 
						|
	if err != nil {
 | 
						|
		return fmt.Errorf("failed to map object: %w", err)
 | 
						|
	}
 | 
						|
 | 
						|
	serverObj, err := n.DynamicClient.Resource(mapping.Resource).
 | 
						|
		List(ctx, metav1.ListOptions{
 | 
						|
			LabelSelector: selector.String(),
 | 
						|
		})
 | 
						|
	if err != nil {
 | 
						|
		return err
 | 
						|
	}
 | 
						|
 | 
						|
	serverObj.DeepCopyInto(list)
 | 
						|
	return nil
 | 
						|
}
 | 
						|
 | 
						|
func (n *DynamicClusterReader) Sync(_ context.Context) error {
 | 
						|
	return nil
 | 
						|
}
 |