...

Source file src/sigs.k8s.io/cli-utils/pkg/apply/info/helper.go

Documentation: sigs.k8s.io/cli-utils/pkg/apply/info

     1  // Copyright 2020 The Kubernetes Authors.
     2  // SPDX-License-Identifier: Apache-2.0
     3  
     4  package info
     5  
     6  import (
     7  	"k8s.io/apimachinery/pkg/api/meta"
     8  	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
     9  	"k8s.io/cli-runtime/pkg/resource"
    10  	"sigs.k8s.io/cli-utils/pkg/object"
    11  )
    12  
    13  // Helper provides functions for interacting with Info objects.
    14  type Helper interface {
    15  	// UpdateInfo sets the mapping and client for the provided Info
    16  	// object. This must be called at a time when all needed resource
    17  	// types are available in the RESTMapper.
    18  	UpdateInfo(info *resource.Info) error
    19  
    20  	BuildInfo(obj *unstructured.Unstructured) (*resource.Info, error)
    21  }
    22  
    23  func NewHelper(mapper meta.RESTMapper, unstructuredClientForMapping func(*meta.RESTMapping) (resource.RESTClient, error)) Helper {
    24  	return &helper{
    25  		mapper:                       mapper,
    26  		unstructuredClientForMapping: unstructuredClientForMapping,
    27  	}
    28  }
    29  
    30  type helper struct {
    31  	mapper                       meta.RESTMapper
    32  	unstructuredClientForMapping func(*meta.RESTMapping) (resource.RESTClient, error)
    33  }
    34  
    35  func (ih *helper) UpdateInfo(info *resource.Info) error {
    36  	gvk := info.Object.GetObjectKind().GroupVersionKind()
    37  	mapping, err := ih.mapper.RESTMapping(gvk.GroupKind(), gvk.Version)
    38  	if err != nil {
    39  		return err
    40  	}
    41  	info.Mapping = mapping
    42  
    43  	c, err := ih.unstructuredClientForMapping(mapping)
    44  	if err != nil {
    45  		return err
    46  	}
    47  	info.Client = c
    48  	return nil
    49  }
    50  
    51  func (ih *helper) BuildInfo(obj *unstructured.Unstructured) (*resource.Info, error) {
    52  	info, err := object.UnstructuredToInfo(obj)
    53  	if err != nil {
    54  		return nil, err
    55  	}
    56  	err = ih.UpdateInfo(info)
    57  	return info, err
    58  }
    59  

View as plain text