Skip to content

Instantly share code, notes, and snippets.

@developer-guy
Last active April 14, 2021 21:50
Show Gist options
  • Save developer-guy/7c40f3af018ed323b40acd8bc38921ad to your computer and use it in GitHub Desktop.
Save developer-guy/7c40f3af018ed323b40acd8bc38921ad to your computer and use it in GitHub Desktop.
Provision a Local Kubernetes Cluster Using KinD with Go
package main
import (
"os"
"os/signal"
"syscall"
"github.com/sirupsen/logrus"
"sigs.k8s.io/kind/pkg/cluster"
"sigs.k8s.io/kind/pkg/log"
)
type FurkanLogger struct {
logger *logrus.Logger
}
func (fl *FurkanLogger) V(level log.Level) log.InfoLogger {
//fl.logger.SetLevel(logrus.Level(level))
return fl
}
func (fl *FurkanLogger) Enabled() bool {
return true
}
func (fl *FurkanLogger) Info(message string) {
fl.logger.Info(message)
}
func (fl *FurkanLogger) Infof(format string, args ...interface{}) {
fl.logger.Infof(format, args)
}
func (fl *FurkanLogger) Warn(message string) {
fl.logger.Warn(message)
}
// Warnf should be used to write Printf style user facing warnings
func (fl *FurkanLogger) Warnf(format string, args ...interface{}) {
fl.logger.Warnf(format, args)
}
// Error may be used to write an error message when it occurs
// Prefer returning an error instead in most cases
func (fl *FurkanLogger) Error(message string) {
fl.logger.Error(message)
}
// Errorf may be used to write a Printf style error message when it occurs
// Prefer returning an error instead in most cases
func (fl *FurkanLogger) Errorf(format string, args ...interface{}) {
fl.logger.Errorf(format, args)
}
var _ log.Logger = new(FurkanLogger)
func main() {
logger := logrus.New()
// Log as JSON instead of the default ASCII formatter.
logrus.SetFormatter(&logrus.JSONFormatter{})
// Output to stdout instead of the default stderr
// Can be any io.Writer, see below for File example
logrus.SetOutput(os.Stdout)
// Only log the warning severity or above.
logrus.SetLevel(logrus.TraceLevel)
fl := FurkanLogger{logger: logger}
signChn := make(chan os.Signal)
signal.Notify(signChn, syscall.SIGINT, syscall.SIGTERM)
provider := cluster.NewProvider(cluster.ProviderWithDocker(), cluster.ProviderWithLogger(&fl))
err := provider.Create("my-test-cluster", cluster.CreateWithConfigFile("./config.yaml"), cluster.CreateWithKubeconfigPath("./kubeconfig"))
defer provider.Delete("my-test-cluster", "./config.yaml")
if err != nil {
fl.Errorf("could not create cluster, error: %s", err.Error())
os.Exit(1)
}
<-signChn
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment