Documentation
¶
Index ¶
- Constants
- Variables
- func AggregatorCacheFunc(newCache cache.NewCacheFunc, ...) cache.NewCacheFunc
- func ApplyClientConnectionConfigurationToRESTConfig(clientConnection *componentbaseconfig.ClientConnectionConfiguration, ...)
- func CheckForwardPodPort(fw PortForwarder) error
- func DefaultCreateOptions() metav1.CreateOptions
- func DefaultGetOptions() metav1.GetOptions
- func DefaultUpdateOptions() metav1.UpdateOptions
- func GetPodLogs(ctx context.Context, podInterface corev1client.PodInterface, name string, ...) ([]byte, error)
- func HasDeploymentRolloutCompleted(ctx context.Context, c client.Client, namespace, name string) (bool, error)
- func NewRuntimeCache(config *rest.Config, options cache.Options) (cache.Cache, error)
- func RESTConfigFromClientConnectionConfiguration(cfg *componentbaseconfig.ClientConnectionConfiguration, kubeconfig []byte, ...) (*rest.Config, error)
- func RESTConfigFromKubeconfig(kubeconfig []byte, allowedFields ...string) (*rest.Config, error)
- func RESTConfigFromKubeconfigFile(kubeconfigFile string, allowedFields ...string) (*rest.Config, error)
- func ScaleDeployment(ctx context.Context, c client.Client, key client.ObjectKey, replicas int32) error
- func ScaleStatefulSet(ctx context.Context, c client.Client, key client.ObjectKey, replicas int32) error
- func ScaleStatefulSetAndWaitUntilScaled(ctx context.Context, c client.Client, key client.ObjectKey, replicas int32) error
- func SingleObjectCacheFunc(log logr.Logger, scheme *runtime.Scheme, obj client.Object) cache.NewCacheFunc
- func ValidateConfig(config clientcmdapi.Config) error
- func ValidateConfigWithAllowList(config clientcmdapi.Config, allowedFields []string) error
- func WaitUntilDeploymentRolloutIsComplete(ctx context.Context, client client.Client, namespace string, name string, ...) error
- func WaitUntilDeploymentScaledToDesiredReplicas(ctx context.Context, client client.Client, key types.NamespacedName, ...) error
- func WaitUntilStatefulSetScaledToDesiredReplicas(ctx context.Context, client client.Client, key types.NamespacedName, ...) error
- type Applier
- type ApplyOption
- type ApplyOptions
- type ChartApplier
- type Config
- type ConfigFunc
- func WithAllowedUserFields(allowedUserFields []string) ConfigFunc
- func WithCacheSyncPeriod(sync time.Duration) ConfigFunc
- func WithClientConfig(clientConfig clientcmd.ClientConfig) ConfigFunc
- func WithClientConnectionOptions(cfg componentbaseconfig.ClientConnectionConfiguration) ConfigFunc
- func WithClientOptions(opt client.Options) ConfigFunc
- func WithDisabledCachedClient() ConfigFunc
- func WithNewCacheFunc(fn cache.NewCacheFunc) ConfigFunc
- func WithRESTConfig(restConfig *rest.Config) ConfigFunc
- func WithRuntimeAPIReader(runtimeAPIReader client.Reader) ConfigFunc
- func WithRuntimeCache(runtimeCache cache.Cache) ConfigFunc
- func WithRuntimeClient(runtimeClient client.Client) ConfigFunc
- type DeleteManifestOption
- type DeleteManifestOptions
- type DeleteOption
- type DeleteOptions
- type FallbackClient
- type Interface
- func NewClientFromBytes(kubeconfig []byte, fns ...ConfigFunc) (Interface, error)
- func NewClientFromFile(masterURL, kubeconfigPath string, fns ...ConfigFunc) (Interface, error)
- func NewClientFromSecret(ctx context.Context, c client.Client, namespace, secretName string, ...) (Interface, error)
- func NewClientFromSecretObject(secret *corev1.Secret, fns ...ConfigFunc) (Interface, error)
- func NewWithConfig(fns ...ConfigFunc) (Interface, error)
- type MergeFunc
- type MergeFuncs
- type PodExecutor
- type PortForwarder
- type TolerateErrorFunc
- type UnstructuredReader
- type ValueOption
Constants ¶
const ( // KubeConfig is the key to the kubeconfig KubeConfig = "kubeconfig" // AuthClientCertificate references the AuthInfo.ClientCertificate field of a kubeconfig AuthClientCertificate = "client-certificate" // AuthClientKey references the AuthInfo.ClientKey field of a kubeconfig AuthClientKey = "client-key" // AuthTokenFile references the AuthInfo.Tokenfile field of a kubeconfig AuthTokenFile = "tokenFile" // AuthImpersonate references the AuthInfo.Impersonate field of a kubeconfig AuthImpersonate = "act-as" // AuthProvider references the AuthInfo.AuthProvider field of a kubeconfig AuthProvider = "auth-provider" // AuthExec references the AuthInfo.Exec field of a kubeconfig AuthExec = "exec" )
Variables ¶
var ( DefaultMergeFuncs = MergeFuncs{ corev1.SchemeGroupVersion.WithKind("Service").GroupKind(): func(newObj, oldObj *unstructured.Unstructured) { newSvcType, found, _ := unstructured.NestedString(newObj.Object, "spec", "type") if !found { newSvcType = string(corev1.ServiceTypeClusterIP) _ = unstructured.SetNestedField(newObj.Object, newSvcType, "spec", "type") } oldSvcType, found, _ := unstructured.NestedString(oldObj.Object, "spec", "type") if !found { oldSvcType = string(corev1.ServiceTypeClusterIP) } annotations, found, _ := unstructured.NestedMap(oldObj.Object, "metadata", "annotations") if found { mergedAnnotations := make(map[string]any) for key, value := range annotations { annotation := key annotationValue := value.(string) for _, keepAnnotation := range keepServiceAnnotations() { if strings.HasPrefix(annotation, keepAnnotation) { mergedAnnotations[annotation] = annotationValue } } } newAnnotations, found, _ := unstructured.NestedMap(newObj.Object, "metadata", "annotations") if found { for key, value := range newAnnotations { mergedAnnotations[key] = value.(string) } } _ = unstructured.SetNestedMap(newObj.Object, mergedAnnotations, "metadata", "annotations") } switch newSvcType { case string(corev1.ServiceTypeLoadBalancer), string(corev1.ServiceTypeNodePort): oldPorts, found, _ := unstructured.NestedSlice(oldObj.Object, "spec", "ports") if !found { break } newPorts, found, _ := unstructured.NestedSlice(newObj.Object, "spec", "ports") if !found { break } ports := make([]any, 0, len(newPorts)) for _, newPort := range newPorts { np := newPort.(map[string]any) npName, _, _ := unstructured.NestedString(np, "name") npPort, _ := nestedFloat64OrInt64(np, "port") nodePort, ok := nestedFloat64OrInt64(np, "nodePort") for _, oldPortObj := range oldPorts { op := oldPortObj.(map[string]any) opName, _, _ := unstructured.NestedString(op, "name") opPort, _ := nestedFloat64OrInt64(op, "port") if (opName == npName || opPort == npPort) && (!ok || nodePort == 0) { np["nodePort"] = op["nodePort"] } } ports = append(ports, np) } _ = unstructured.SetNestedSlice(newObj.Object, ports, "spec", "ports") case string(corev1.ServiceTypeExternalName): return } if oldSvcType != string(corev1.ServiceTypeExternalName) { newClusterIP, _, _ := unstructured.NestedString(newObj.Object, "spec", "clusterIP") if newClusterIP != corev1.ClusterIPNone || newSvcType != string(corev1.ServiceTypeClusterIP) { oldClusterIP, _, _ := unstructured.NestedString(oldObj.Object, "spec", "clusterIP") _ = unstructured.SetNestedField(newObj.Object, oldClusterIP, "spec", "clusterIP") } } newETP, _, _ := unstructured.NestedString(newObj.Object, "spec", "externalTrafficPolicy") oldETP, _, _ := unstructured.NestedString(oldObj.Object, "spec", "externalTrafficPolicy") if oldSvcType == string(corev1.ServiceTypeLoadBalancer) && newSvcType == string(corev1.ServiceTypeLoadBalancer) && newETP == string(corev1.ServiceExternalTrafficPolicyLocal) && oldETP == string(corev1.ServiceExternalTrafficPolicyLocal) { newHealthCheckPort, _ := nestedFloat64OrInt64(newObj.Object, "spec", "healthCheckNodePort") if newHealthCheckPort == 0 { oldHealthCheckPort, _ := nestedFloat64OrInt64(oldObj.Object, "spec", "healthCheckNodePort") _ = unstructured.SetNestedField(newObj.Object, oldHealthCheckPort, "spec", "healthCheckNodePort") } } }, corev1.SchemeGroupVersion.WithKind("ServiceAccount").GroupKind(): func(newObj, oldObj *unstructured.Unstructured) { newObj.Object["secrets"] = oldObj.Object["secrets"] newObj.Object["imagePullSecrets"] = oldObj.Object["imagePullSecrets"] }, {Group: "autoscaling.k8s.io", Kind: "VerticalPodAutoscaler"}: func(newObj, oldObj *unstructured.Unstructured) { if oldStatus := oldObj.Object["status"]; oldStatus != nil { newObj.Object["status"] = oldStatus } }, } DeploymentKeepReplicasMergeFunc = MergeFunc(func(newObj, oldObj *unstructured.Unstructured) { oldReplicas, ok := nestedFloat64OrInt64(oldObj.Object, "spec", "replicas") if !ok { return } _ = unstructured.SetNestedField(newObj.Object, oldReplicas, "spec", "replicas") }) )
DefaultMergeFuncs contains options for common k8s objects, e.g. Service, ServiceAccount.
var ( // GardenScheme is the scheme used in the Garden cluster. GardenScheme = runtime.NewScheme() // SeedScheme is the scheme used in the Seed cluster. SeedScheme = runtime.NewScheme() // ShootScheme is the scheme used in the Shoot cluster. ShootScheme = runtime.NewScheme() // DefaultDeleteOptions use foreground propagation policy and grace period of 60 seconds. DefaultDeleteOptions = []client.DeleteOption{ client.PropagationPolicy(metav1.DeletePropagationForeground), client.GracePeriodSeconds(60), } // ForceDeleteOptions use background propagation policy and grace period of 0 seconds. ForceDeleteOptions = []client.DeleteOption{ client.PropagationPolicy(metav1.DeletePropagationBackground), client.GracePeriodSeconds(0), } // GardenSerializer is a YAML serializer using the Garden scheme. GardenSerializer = json.NewSerializerWithOptions(json.DefaultMetaFactory, GardenScheme, GardenScheme, json.SerializerOptions{Yaml: true, Pretty: false, Strict: false}) // GardenCodec is a codec factory using the Garden scheme. GardenCodec = serializer.NewCodecFactory(GardenScheme) // SeedSerializer is a YAML serializer using the Seed scheme. SeedSerializer = json.NewSerializerWithOptions(json.DefaultMetaFactory, SeedScheme, SeedScheme, json.SerializerOptions{Yaml: true, Pretty: false, Strict: false}) // SeedCodec is a codec factory using the Seed scheme. SeedCodec = serializer.NewCodecFactory(SeedScheme) // ShootSerializer is a YAML serializer using the Shoot scheme. ShootSerializer = json.NewSerializerWithOptions(json.DefaultMetaFactory, ShootScheme, ShootScheme, json.SerializerOptions{Yaml: true, Pretty: false, Strict: false}) // ShootCodec is a codec factory using the Shoot scheme. ShootCodec = serializer.NewCodecFactory(ShootScheme) )
var ( // AddGardenSchemeToScheme adds all object kinds used in the Garden cluster into the given scheme. AddGardenSchemeToScheme = gardenSchemeBuilder.AddToScheme // AddSeedSchemeToScheme adds all object kinds used in the Seed cluster into the given scheme. AddSeedSchemeToScheme = seedSchemeBuilder.AddToScheme // AddShootSchemeToScheme adds all object kinds used in the Shoot cluster into the given scheme. AddShootSchemeToScheme = shootSchemeBuilder.AddToScheme )
var ForceNamespace = forceNamespace{}
ForceNamespace can be used for native chart objects do not come with a Release.Namespace option and leave the namespace field empty.
var Values = func(values any) ValueOption { return &withValue{values} }
Values applies values to ApplyOptions or DeleteOptions.
Functions ¶
func AggregatorCacheFunc ¶
func AggregatorCacheFunc(newCache cache.NewCacheFunc, typeToNewCache map[client.Object]cache.NewCacheFunc, scheme *runtime.Scheme) cache.NewCacheFunc
AggregatorCacheFunc returns a `cache.NewCacheFunc` which creates a cache that holds different cache implementations depending on the objects' GVKs.
func ApplyClientConnectionConfigurationToRESTConfig ¶
func ApplyClientConnectionConfigurationToRESTConfig(clientConnection *componentbaseconfig.ClientConnectionConfiguration, rest *rest.Config)
ApplyClientConnectionConfigurationToRESTConfig applies the given client connection configurations to the given REST config.
func CheckForwardPodPort ¶
func CheckForwardPodPort(fw PortForwarder) error
CheckForwardPodPort tries to open a portForward connection with the passed PortForwarder. It returns nil if the port forward connection has been established successfully or an error otherwise.
func DefaultCreateOptions ¶
func DefaultCreateOptions() metav1.CreateOptions
DefaultCreateOptions are the default options for CREATE requests.
func DefaultGetOptions ¶
func DefaultGetOptions() metav1.GetOptions
DefaultGetOptions are the default options for GET requests.
func DefaultUpdateOptions ¶
func DefaultUpdateOptions() metav1.UpdateOptions
DefaultUpdateOptions are the default options for UPDATE requests.
func GetPodLogs ¶ added in v0.2.0
func GetPodLogs(ctx context.Context, podInterface corev1client.PodInterface, name string, options *corev1.PodLogOptions) ([]byte, error)
GetPodLogs retrieves the pod logs of the pod of the given name with the given options.
func HasDeploymentRolloutCompleted ¶ added in v0.2.0
func HasDeploymentRolloutCompleted(ctx context.Context, c client.Client, namespace, name string) (bool, error)
HasDeploymentRolloutCompleted checks for the number of updated & available replicas to be equal to the deployment's desired replicas count. Thus confirming a successful rollout of the deployment.
func NewRuntimeCache ¶
NewRuntimeCache creates a new cache.Cache with the given config and options. It can be used for creating new controller-runtime clients with caches.
func RESTConfigFromClientConnectionConfiguration ¶
func RESTConfigFromClientConnectionConfiguration(cfg *componentbaseconfig.ClientConnectionConfiguration, kubeconfig []byte, allowedFields ...string) (*rest.Config, error)
RESTConfigFromClientConnectionConfiguration creates a *rest.Config from a componentbaseconfig.ClientConnectionConfiguration and the configured kubeconfig. Allowed fields are not considered unsupported if used in the kubeconfig.
func RESTConfigFromKubeconfig ¶
RESTConfigFromKubeconfig returns a rest.Config from the bytes of a kubeconfig. Allowed fields are not considered unsupported if used in the kubeconfig.
func RESTConfigFromKubeconfigFile ¶
func RESTConfigFromKubeconfigFile(kubeconfigFile string, allowedFields ...string) (*rest.Config, error)
RESTConfigFromKubeconfigFile returns a rest.Config from the bytes of a kubeconfig file. Allowed fields are not considered unsupported if used in the kubeconfig.
func ScaleDeployment ¶ added in v0.2.0
func ScaleDeployment(ctx context.Context, c client.Client, key client.ObjectKey, replicas int32) error
ScaleDeployment scales a Deployment.
func ScaleStatefulSet ¶ added in v0.2.0
func ScaleStatefulSet(ctx context.Context, c client.Client, key client.ObjectKey, replicas int32) error
ScaleStatefulSet scales a StatefulSet.
func ScaleStatefulSetAndWaitUntilScaled ¶ added in v0.2.0
func ScaleStatefulSetAndWaitUntilScaled(ctx context.Context, c client.Client, key client.ObjectKey, replicas int32) error
ScaleStatefulSetAndWaitUntilScaled scales a StatefulSet and wait until is scaled.
func SingleObjectCacheFunc ¶
func SingleObjectCacheFunc(log logr.Logger, scheme *runtime.Scheme, obj client.Object) cache.NewCacheFunc
SingleObjectCacheFunc returns a cache.NewCacheFunc for the SingleObject implementation.
func ValidateConfig ¶
func ValidateConfig(config clientcmdapi.Config) error
ValidateConfig validates that the auth info of a given kubeconfig doesn't have unsupported fields.
func ValidateConfigWithAllowList ¶
func ValidateConfigWithAllowList(config clientcmdapi.Config, allowedFields []string) error
ValidateConfigWithAllowList validates that the auth info of a given kubeconfig doesn't have unsupported fields. It takes an additional list of allowed fields.
func WaitUntilDeploymentRolloutIsComplete ¶ added in v0.2.0
func WaitUntilDeploymentRolloutIsComplete(ctx context.Context, client client.Client, namespace string, name string, interval, timeout time.Duration) error
WaitUntilDeploymentRolloutIsComplete waits for the number of updated & available replicas to be equal to the deployment's desired replicas count. It keeps retrying until timeout
func WaitUntilDeploymentScaledToDesiredReplicas ¶ added in v0.2.0
func WaitUntilDeploymentScaledToDesiredReplicas(ctx context.Context, client client.Client, key types.NamespacedName, desiredReplicas int32) error
WaitUntilDeploymentScaledToDesiredReplicas waits for the number of available replicas to be equal to the deployment's desired replicas count.
func WaitUntilStatefulSetScaledToDesiredReplicas ¶ added in v0.2.0
func WaitUntilStatefulSetScaledToDesiredReplicas(ctx context.Context, client client.Client, key types.NamespacedName, desiredReplicas int32) error
WaitUntilStatefulSetScaledToDesiredReplicas waits for the number of available replicas to be equal to the StatefulSet's desired replicas count.
Types ¶
type Applier ¶
type Applier interface { ApplyManifest(ctx context.Context, unstructured UnstructuredReader, options MergeFuncs) error DeleteManifest(ctx context.Context, unstructured UnstructuredReader, opts ...DeleteManifestOption) error }
Applier is an interface which describes declarative operations to apply multiple Kubernetes objects.
func NewApplier ¶
func NewApplier(c client.Client, restMapper meta.RESTMapper) Applier
NewApplier constructs a new Applier from the given client.
type ApplyOption ¶
type ApplyOption interface { // MutateApplyOptions applies this configuration to the given apply options. MutateApplyOptions(opts *ApplyOptions) }
ApplyOption is some configuration that modifies options for a apply request.
type ApplyOptions ¶
type ApplyOptions struct { // Values to pass to chart. Values any // Additional MergeFunctions. MergeFuncs MergeFuncs // Forces the namespace for chart objects when applying the chart, this is because sometimes native chart // objects do not come with a Release.Namespace option and leave the namespace field empty ForceNamespace bool }
ApplyOptions contains options for apply requests
type ChartApplier ¶
type ChartApplier interface { chartrenderer.Interface ApplyFromEmbeddedFS(ctx context.Context, embeddedFS embed.FS, chartPath, namespace, name string, opts ...ApplyOption) error DeleteFromEmbeddedFS(ctx context.Context, embeddedFS embed.FS, chartPath, namespace, name string, opts ...DeleteOption) error ApplyFromArchive(ctx context.Context, archive []byte, namespace, name string, opts ...ApplyOption) error DeleteFromArchive(ctx context.Context, archive []byte, namespace, name string, opts ...DeleteOption) error }
ChartApplier is an interface that describes needed methods that render and apply Helm charts in Kubernetes clusters.
func NewChartApplier ¶
func NewChartApplier(renderer chartrenderer.Interface, applier Applier) ChartApplier
NewChartApplier returns a new chart applier.
func NewChartApplierForConfig ¶
func NewChartApplierForConfig(config *rest.Config) (ChartApplier, error)
NewChartApplierForConfig returns a new chart applier based on the given REST config.
type Config ¶
type Config struct {
// contains filtered or unexported fields
}
Config carries options for new ClientSets.
type ConfigFunc ¶
ConfigFunc is a function that mutates a Config struct. It implements the functional options pattern. See https://github.com/tmrts/go-patterns/blob/master/idiom/functional-options.md.
func WithAllowedUserFields ¶
func WithAllowedUserFields(allowedUserFields []string) ConfigFunc
WithAllowedUserFields allows to specify additional kubeconfig.user fields allowed during validation.
func WithCacheSyncPeriod ¶
func WithCacheSyncPeriod(sync time.Duration) ConfigFunc
WithCacheSyncPeriod returns a ConfigFunc that set the client's cache's sync period to the given duration.
func WithClientConfig ¶
func WithClientConfig(clientConfig clientcmd.ClientConfig) ConfigFunc
WithClientConfig adds a ClientConfig for validation at a later stage.
func WithClientConnectionOptions ¶
func WithClientConnectionOptions(cfg componentbaseconfig.ClientConnectionConfiguration) ConfigFunc
WithClientConnectionOptions returns a ConfigFunc that transfers settings from the passed ClientConnectionConfiguration. The kubeconfig location in ClientConnectionConfiguration is disregarded, though!
func WithClientOptions ¶
func WithClientOptions(opt client.Options) ConfigFunc
WithClientOptions returns a ConfigFunc that sets the passed Options on the Config object.
func WithDisabledCachedClient ¶
func WithDisabledCachedClient() ConfigFunc
WithDisabledCachedClient disables the cache in the controller-runtime client, so Client() will talk directly to the API server.
func WithNewCacheFunc ¶
func WithNewCacheFunc(fn cache.NewCacheFunc) ConfigFunc
WithNewCacheFunc allows to set the function which is used to create a new cache.
func WithRESTConfig ¶
func WithRESTConfig(restConfig *rest.Config) ConfigFunc
WithRESTConfig returns a ConfigFunc that sets the passed rest.Config on the Config object.
func WithRuntimeAPIReader ¶
func WithRuntimeAPIReader(runtimeAPIReader client.Reader) ConfigFunc
WithRuntimeAPIReader returns a ConfigFunc that sets the passed runtimeAPIReader on the Config object.
func WithRuntimeCache ¶
func WithRuntimeCache(runtimeCache cache.Cache) ConfigFunc
WithRuntimeCache returns a ConfigFunc that sets the passed runtimeCache on the Config object.
func WithRuntimeClient ¶
func WithRuntimeClient(runtimeClient client.Client) ConfigFunc
WithRuntimeClient returns a ConfigFunc that sets the passed runtimeClient on the Config object.
type DeleteManifestOption ¶
type DeleteManifestOption interface { // MutateDeleteManifestOptions applies this configuration to the given delete options. MutateDeleteManifestOptions(opts *DeleteManifestOptions) }
DeleteManifestOption is some configuration that modifies options for a delete request.
type DeleteManifestOptions ¶
type DeleteManifestOptions struct { // TolerateErrorFuncs are functions for which errors are tolerated. TolerateErrorFuncs []TolerateErrorFunc }
DeleteManifestOptions contains options for delete requests.
type DeleteOption ¶
type DeleteOption interface { // MutateDeleteOptions applies this configuration to the given delete options. MutateDeleteOptions(opts *DeleteOptions) }
DeleteOption is some configuration that modifies options for a delete request.
type DeleteOptions ¶
type DeleteOptions struct { // Values to pass to chart. Values any // Forces the namespace for chart objects when applying the chart, this is because sometimes native chart // objects do not come with a Release.Namespace option and leave the namespace field empty ForceNamespace bool // TolerateErrorFuncs are functions for which errors are tolerated. TolerateErrorFuncs []TolerateErrorFunc }
DeleteOptions contains options for delete requests
type FallbackClient ¶
type FallbackClient struct { client.Client Reader client.Reader KindToNamespaces map[string]sets.Set[string] }
FallbackClient holds a `client.Client` and a `client.Reader` which is meant as a fallback in case the kind of an object is configured in `KindToNamespaces` but the namespace isn't.
func (*FallbackClient) Get ¶
func (d *FallbackClient) Get(ctx context.Context, key client.ObjectKey, obj client.Object, opts ...client.GetOption) error
Get retrieves an obj for a given object key from the Kubernetes Cluster. `client.Reader` is used in case the kind of an object is configured in `KindToNamespaces` but the namespace isn't.
func (*FallbackClient) List ¶
func (d *FallbackClient) List(ctx context.Context, list client.ObjectList, opts ...client.ListOption) error
List retrieves list of objects for a given namespace and list options.
type Interface ¶
type Interface interface { RESTConfig() *rest.Config RESTClient() rest.Interface // Client returns the ClientSet's controller-runtime client. This client should be used by default, as it carries // a cache, which uses SharedIndexInformers to keep up-to-date. Client() client.Client // APIReader returns a client.Reader that directly reads from the API server. // Wherever possible, try to avoid reading directly from the API server and instead rely on the cache. Some ideas: // If you want to avoid conflicts, try using patch requests that don't require optimistic locking instead of reading // from the APIReader. If you need to make sure, that you're not reading stale data (e.g. a previous update is // observed), use some mechanism that can detect/tolerate stale reads (e.g. add a timestamp annotation during the // write operation and wait until you see it in the cache). APIReader() client.Reader // Cache returns the ClientSet's controller-runtime cache. It can be used to get Informers for arbitrary objects. Cache() cache.Cache // Applier returns an Applier which uses the ClientSet's client. Applier() Applier // ChartRenderer returns a ChartRenderer populated with the cluster's Capabilities. ChartRenderer() chartrenderer.Interface // ChartApplier returns a ChartApplier using the ClientSet's ChartRenderer and Applier. ChartApplier() ChartApplier Kubernetes() kubernetesclientset.Interface // Version returns the server version of the targeted Kubernetes cluster. Version() string // DiscoverVersion tries to retrieve the server version of the targeted Kubernetes cluster and updates the // ClientSet's saved version accordingly. Use Version if you only want to retrieve the kubernetes version instead // of refreshing the ClientSet's saved version. DiscoverVersion() (*version.Info, error) // Start starts the cache of the ClientSet's controller-runtime client and returns immediately. // It must be called first before using the client to retrieve objects from the API server. Start(ctx context.Context) // WaitForCacheSync waits for the cache of the ClientSet's controller-runtime client to be synced. WaitForCacheSync(ctx context.Context) bool }
Interface is used to wrap the interactions with a Kubernetes cluster (which are performed with the help of kubernetes/client-go) in order to allow the implementation of several Kubernetes versions.
func NewClientFromBytes ¶
func NewClientFromBytes(kubeconfig []byte, fns ...ConfigFunc) (Interface, error)
NewClientFromBytes creates a new Client struct for a given kubeconfig byte slice.
func NewClientFromFile ¶
func NewClientFromFile(masterURL, kubeconfigPath string, fns ...ConfigFunc) (Interface, error)
NewClientFromFile creates a new Client struct for a given kubeconfig. The kubeconfig will be read from the filesystem at location <kubeconfigPath>. If given, <masterURL> overrides the master URL in the kubeconfig. If no filepath is given, the in-cluster configuration will be taken into account.
func NewClientFromSecret ¶
func NewClientFromSecret(ctx context.Context, c client.Client, namespace, secretName string, fns ...ConfigFunc) (Interface, error)
NewClientFromSecret creates a new Client struct for a given kubeconfig stored as a Secret in an existing Kubernetes cluster. This cluster will be accessed by the <k8sClient>. It will read the Secret <secretName> in <namespace>. The Secret must contain a field "kubeconfig" which will be used.
func NewClientFromSecretObject ¶
func NewClientFromSecretObject(secret *corev1.Secret, fns ...ConfigFunc) (Interface, error)
NewClientFromSecretObject creates a new Client struct for a given Kubernetes Secret object. The Secret must contain a field "kubeconfig" which will be used.
func NewWithConfig ¶
func NewWithConfig(fns ...ConfigFunc) (Interface, error)
NewWithConfig returns a new Kubernetes base client.
type MergeFunc ¶
type MergeFunc func(newObj, oldObj *unstructured.Unstructured)
MergeFunc determines how oldOj is merged into new oldObj.
type MergeFuncs ¶
MergeFuncs can be used modify the default merge functions for ApplyOptions:
Apply(ctx, "chart", "my-ns", "my-release", MergeFuncs{ corev1.SchemeGroupVersion.WithKind("Service").GroupKind(): func(newObj, oldObj *unstructured.Unstructured) { newObj.SetAnnotations(map[string]string{"foo":"bar"}) } })
func CopyApplierOptions ¶
func CopyApplierOptions(in MergeFuncs) MergeFuncs
CopyApplierOptions returns a copies of the provided applier options.
func (MergeFuncs) MutateApplyOptions ¶
func (m MergeFuncs) MutateApplyOptions(opts *ApplyOptions)
MutateApplyOptions applies this configuration to the given apply options.
type PodExecutor ¶
type PodExecutor interface {
Execute(ctx context.Context, namespace, name, containerName, command, commandArg string) (io.Reader, error)
}
PodExecutor is the pod executor interface
func NewPodExecutor ¶
func NewPodExecutor(config *rest.Config) PodExecutor
NewPodExecutor returns a podExecutor
type PortForwarder ¶
type PortForwarder interface { ForwardPorts() error Ready() chan struct{} }
PortForwarder knows how to forward a port connection Ready channel is expected to be closed once the connection becomes ready
func SetupPortForwarder ¶
func SetupPortForwarder(ctx context.Context, config *rest.Config, namespace, name string, local, remote int) (PortForwarder, error)
SetupPortForwarder sets up a PortForwarder which forwards the <remote> port of the pod with name <name> in namespace <namespace> to the <local> port. If <local> equals zero, a free port will be chosen randomly. When calling ForwardPorts on the returned PortForwarder, it will run until the given context is cancelled. Hence, the given context should carry a timeout and should be cancelled once the forwarding is no longer needed.
type TolerateErrorFunc ¶
TolerateErrorFunc is a function for which err is tolerated.
func (TolerateErrorFunc) MutateDeleteManifestOptions ¶
func (t TolerateErrorFunc) MutateDeleteManifestOptions(opts *DeleteManifestOptions)
MutateDeleteManifestOptions applies this configuration to the given delete manifest options.
func (TolerateErrorFunc) MutateDeleteOptions ¶
func (t TolerateErrorFunc) MutateDeleteOptions(opts *DeleteOptions)
MutateDeleteOptions applies this configuration to the given delete options.
type UnstructuredReader ¶
type UnstructuredReader interface {
Read() (*unstructured.Unstructured, error)
}
UnstructuredReader an interface that all manifest readers should implement
func NewManifestReader ¶
func NewManifestReader(manifest []byte) UnstructuredReader
NewManifestReader initializes a reader for yaml manifests
func NewNamespaceSettingReader ¶
func NewNamespaceSettingReader(mReader UnstructuredReader, namespace string) UnstructuredReader
NewNamespaceSettingReader initializes a reader for yaml manifests with support for setting the namespace
func NewObjectReferenceReader ¶
func NewObjectReferenceReader(objectReference *corev1.ObjectReference) UnstructuredReader
NewObjectReferenceReader initializes a reader from ObjectReference
type ValueOption ¶
type ValueOption interface { ApplyOption DeleteOption }
ValueOption contains value options for Apply and Delete.