diff --git a/provider/helm/helm.go b/provider/helm/helm.go new file mode 100644 index 00000000..db32acda --- /dev/null +++ b/provider/helm/helm.go @@ -0,0 +1,58 @@ +package helm + +import ( + "fmt" + "os" + + "k8s.io/helm/pkg/helm" + helm_env "k8s.io/helm/pkg/helm/environment" + rls "k8s.io/helm/pkg/proto/hapi/services" + "k8s.io/helm/pkg/tlsutil" +) + +var ( + tlsCaCertFile string // path to TLS CA certificate file + tlsCertFile string // path to TLS certificate file + tlsKeyFile string // path to TLS key file + tlsVerify bool // enable TLS and verify remote certificates + tlsEnable bool // enable TLS + + // kubeContext string + // tillerTunnel *kube.Tunnel + settings helm_env.EnvSettings +) + +func newClient() helm.Interface { + options := []helm.Option{helm.Host(settings.TillerHost)} + + if tlsVerify || tlsEnable { + tlsopts := tlsutil.Options{KeyFile: tlsKeyFile, CertFile: tlsCertFile, InsecureSkipVerify: true} + if tlsVerify { + tlsopts.CaCertFile = tlsCaCertFile + tlsopts.InsecureSkipVerify = false + } + tlscfg, err := tlsutil.ClientConfig(tlsopts) + if err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(2) + } + options = append(options, helm.WithTLS(tlscfg)) + } + return helm.NewClient(options...) +} + +type HelmImplementer struct { + client helm.Interface +} + +func NewHelmImplementer() *HelmImplementer { + client := newClient() + + return &HelmImplementer{ + client: client, + } +} + +func (i *HelmImplementer) ListReleases(opts ...helm.ReleaseListOption) (*rls.ListReleasesResponse, error) { + return i.client.ListReleases(opts...) +} diff --git a/provider/helm/helm_test.go b/provider/helm/helm_test.go new file mode 100644 index 00000000..12e4833f --- /dev/null +++ b/provider/helm/helm_test.go @@ -0,0 +1,17 @@ +package helm + +import ( + "testing" +) + +func TestImplementerList(t *testing.T) { + imp := NewHelmImplementer() + releases, err := imp.ListReleases() + if err != nil { + t.Fatalf("unexpected error: %s", err) + } + + if releases.Count == 0 { + t.Errorf("why no releases? ") + } +} diff --git a/provider/helm/implementer.go b/provider/helm/implementer.go new file mode 100644 index 00000000..9a90ecfa --- /dev/null +++ b/provider/helm/implementer.go @@ -0,0 +1 @@ +package helm diff --git a/provider/helm/provider.go b/provider/helm/provider.go new file mode 100644 index 00000000..120dbee0 --- /dev/null +++ b/provider/helm/provider.go @@ -0,0 +1,37 @@ +package helm + +import ( + "github.com/rusenask/keel/extension/notification" + "github.com/rusenask/keel/types" +) + +// ProviderName - provider name +const ProviderName = "helm" + +// Provider - kubernetes provider for auto update +type Provider struct { + sender notification.Sender + + events chan *types.Event + stop chan struct{} +} + +// NewProvider - create new kubernetes based provider +func NewProvider(sender notification.Sender) (*Provider, error) { + return &Provider{ + events: make(chan *types.Event, 100), + stop: make(chan struct{}), + sender: sender, + }, nil +} + +// Submit - submit event to provider +func (p *Provider) Submit(event types.Event) error { + p.events <- &event + return nil +} + +// GetName - get provider name +func (p *Provider) GetName() string { + return ProviderName +}