Skip to content

Instantly share code, notes, and snippets.

@alexeldeib
Created January 11, 2020 01:38
Show Gist options
  • Save alexeldeib/3008d201ed71ac0234db80f923c0aae8 to your computer and use it in GitHub Desktop.
Save alexeldeib/3008d201ed71ac0234db80f923c0aae8 to your computer and use it in GitHub Desktop.
resource builder -> type runtime.Object
package main
import (
"fmt"
"os"
"github.com/go-logr/logr"
"github.com/go-logr/zapr"
"github.com/sanity-io/litter"
"github.com/spf13/pflag"
"go.uber.org/zap"
corev1 "k8s.io/api/core/v1"
"k8s.io/cli-runtime/pkg/genericclioptions"
"k8s.io/cli-runtime/pkg/resource"
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
)
func main() {
var log logr.Logger
// add flags for server connection (--kubeconfig, --server, etc)
config := genericclioptions.NewConfigFlags(true)
config.AddFlags(pflag.CommandLine)
// add flags for resource building (-f, --filename, etc)
builderFlags := genericclioptions.NewResourceBuilderFlags().WithFile(true).WithScheme(clientgoscheme.Scheme)
builderFlags.AddFlags(pflag.CommandLine)
zapLog, err := zap.NewDevelopment()
if err != nil {
fmt.Printf("failed to initialize logger: %v", err)
os.Exit(1)
}
log = zapr.NewLogger(zapLog)
// Parse flags
if err := pflag.CommandLine.Parse(os.Args); err != nil {
return
}
// Visit results
visitor := builderFlags.ToBuilder(config, nil).Do()
result, ok := visitor.(*resource.Result)
if !ok {
log.Error(err, "expected result to be of rypt *resource.Result, but was not.")
os.Exit(1)
}
objects, err := result.Object()
if err != nil {
log.Error(err, "failed to build runtime object from result")
os.Exit(1)
}
// litter.Dump(objects)
switch objects.(type) {
case *corev1.List:
list := objects.(*corev1.List)
for _, item := range list.Items {
litter.Dump(item)
}
default:
litter.Dump(objects)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment