initial work on helm provier

pull/39/head
Karolis Rusenas 2017-07-11 06:54:01 +01:00
parent 8f2aca1fad
commit e0dc8c0b77
4 changed files with 113 additions and 0 deletions

58
provider/helm/helm.go Normal file
View File

@ -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...)
}

View File

@ -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? ")
}
}

View File

@ -0,0 +1 @@
package helm

37
provider/helm/provider.go Normal file
View File

@ -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
}