Skip to content

Instantly share code, notes, and snippets.

@sheldonhull
Created January 28, 2022 22:07
Show Gist options
  • Save sheldonhull/764d2702bf9e783fca0263bbabd598a7 to your computer and use it in GitHub Desktop.
Save sheldonhull/764d2702bf9e783fca0263bbabd598a7 to your computer and use it in GitHub Desktop.
[Use Pulumi With Kubernetes and Handle Loading Config as Well As Overrides] Not elegant but worked for round 1 #kubernetes #go #pulumi
package main
import (
"fmt"
"os"
"github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi/config"
)
type MyConfig struct {
Namespace string `yaml:"namespace"`
Onlyyaml bool `yaml:"onlyyaml"`
Environment string `yaml:"environment"`
// ... etc
}
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
pargs := &kubernetes.ProviderArgs{}
var configData MyConfig // Custom config struct to load data into
cfg := config.New(ctx, "")
cfg.RequireObject("data", &configData)
_ = ctx.Log.Info(fmt.Sprintf("Namespace set to: %q", configData.Namespace), &pulumi.LogArgs{})
pargs.Namespace = pulumi.String(configData.Namespace)
renderProviderName := "k8"
homeDir, err := os.UserHomeDir()
if err != nil {
return err
}
if configData.Onlyyaml {
_ = ctx.Log.Info("Onlyyaml set to true, so this won't deploy to k8 directly", nil)
renderProviderName = "k8s-yaml-renderer"
pargs.RenderYamlToDirectory = pulumi.String("yaml")
} else {
_ = ctx.Log.Info(fmt.Sprintf("homedir: %q", homeDir), nil)
kubeConfigOverride, isSet := os.LookupEnv("KUBECONFIG")
if isSet {
_ = ctx.Log.Info(fmt.Sprintf("KUBECONFIG override: %q", kubeConfigOverride), nil)
if _, err := os.Stat(kubeConfigOverride); err != nil {
b, err := os.ReadFile(kubeConfigOverride)
if err != nil {
_ = ctx.Log.Error(fmt.Sprintf("Unable to read Kubeconfig override: %q, %v", kubeConfigOverride, err), nil)
}
pargs.Kubeconfig = pulumi.String(b)
}
} else {
_ = ctx.Log.Info(fmt.Sprintf("KUBECONFIG using config in pulumi: %q", kubeConfigOverride), nil)
pargs.Kubeconfig = pulumi.StringPtr("kubernetes:kubeconfig")
}
}
renderProvider, err := kubernetes.NewProvider(ctx, renderProviderName, pargs)
if err != nil {
return err
}
})
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment