Skip to content

Instantly share code, notes, and snippets.

View timebertt's full-sized avatar

Tim Ebert timebertt

View GitHub Profile
@timebertt
timebertt / README.md
Last active November 9, 2022 12:01
List all pulled images in a cluster with their supported platforms

List all pulled images in a cluster with their supported platforms

This script lists all images that are present on any of the cluster's nodes and determines the platforms supported by the image. It uses the crane tool for detecting supported platforms.

Usage

Example usage:

@timebertt
timebertt / vendor-gardener-v1.44.sh
Created April 5, 2022 08:47
vendor-gardener-v1.44.sh
#!/bin/bash
set -o errexit
set -o nounset
set -o pipefail
extension="$(basename "$PWD")"
platform=$(echo "${extension#gardener-extension-provider-}" | sed 's/packet/equinix-metal/')
echo ">>> Revendoring $extension"
@timebertt
timebertt / patch_optimistic_locking.go
Created January 5, 2022 17:05
Patches with optimistic locking
// json merge patch + optimistic locking
patch := client.MergeFromWithOptions(shoot.DeepCopy(), client.MergeFromWithOptimisticLock{})
// ...
// strategic merge patch + optimistic locking
patch = client.StrategicMergeFrom(shoot.DeepCopy(), client.MergeFromWithOptimisticLock{})
// ...
@timebertt
timebertt / update_patches.go
Created January 5, 2022 17:03
Updates and patches with controller-runtime clients
var (
ctx context.Context
c client.Client
shoot *gardencorev1beta1.Shoot
)
// update
shoot.Spec.Kubernetes.Version = "1.22"
err := c.Update(ctx, shoot)
@timebertt
timebertt / conflict_error.json
Created January 5, 2022 16:29
Example conflict error
{
"kind": "Status",
"apiVersion": "v1",
"metadata": {},
"status": "Failure",
"message": "Operation cannot be fulfilled on configmaps \"foo\": the object has been modified; please apply your changes to the latest version and try again",
"reason": "Conflict",
"details": {
"name": "foo",
"kind": "configmaps"
@timebertt
timebertt / metadata_only_client.go
Created January 5, 2022 15:07
Example metadata-only client usage
var (
ctx context.Context
c client.Client // "sigs.k8s.io/controller-runtime/pkg/client"
podList = &metav1.PartialObjectMetadataList{} // "k8s.io/apimachinery/pkg/apis/meta/v1"
)
podList.SetGroupVersionKind(corev1.SchemeGroupVersion.WithKind("PodList")) // "k8s.io/api/core/v1"
if err := c.List(ctx, podList, client.InNamespace("my-namespace"), client.Limit(1)); err != nil {
return err
}
@timebertt
timebertt / controller_runtime_client.go
Created January 5, 2022 12:40
Example controller-runtime client usage
var (
ctx context.Context
c client.Client // "sigs.k8s.io/controller-runtime/pkg/client"
deployment *appsv1.Deployment // "k8s.io/api/apps/v1"
shoot *gardencorev1beta1.Shoot // "github.com/gardener/gardener/pkg/apis/core/v1beta1"
)
err := c.Update(ctx, deployment)
// or
err = c.Update(ctx, shoot)
@timebertt
timebertt / generated_clientset.go
Created January 5, 2022 12:32
Example generated client set usage
var (
ctx context.Context
c gardencoreclientset.Interface // "github.com/gardener/gardener/pkg/client/core/clientset/versioned"
shoot *gardencorev1beta1.Shoot // "github.com/gardener/gardener/pkg/apis/core/v1beta1"
)
updatedShoot, err := c.CoreV1beta1().Shoots("garden-eden").Update(ctx, shoot, metav1.UpdateOptions{})
@timebertt
timebertt / client_go.go
Last active January 5, 2022 15:00
Example client-go usage
var (
ctx context.Context
c kubernetes.Interface // "k8s.io/client-go/kubernetes"
deployment *appsv1.Deployment // "k8s.io/api/apps/v1"
)
updatedDeployment, err := c.AppsV1().Deployments("default").Update(ctx, deployment, metav1.UpdateOptions{})
@timebertt
timebertt / rebootstrap-seed.sh
Created September 27, 2021 14:42
Manually rebootstrap seed (workaround for gardener/gardener#4687)
#!/usr/bin/env bash
set -o errexit
set -o nounset
set -o pipefail
if [ -z "${SEED_KUBECONFIG:-}" ] ; then
>&2 echo "Please point the SEED_KUBECONFIG env var to the kubeconfig for the seed you want to fix"
exit 1
fi