update tiller environment & release server to use new storage

pull/1007/head
fibonacci1729 9 years ago
parent 0e26f20268
commit 74deac940b

@ -29,8 +29,8 @@ import (
"k8s.io/helm/pkg/engine" "k8s.io/helm/pkg/engine"
"k8s.io/helm/pkg/kube" "k8s.io/helm/pkg/kube"
"k8s.io/helm/pkg/proto/hapi/chart" "k8s.io/helm/pkg/proto/hapi/chart"
"k8s.io/helm/pkg/proto/hapi/release"
"k8s.io/helm/pkg/storage" "k8s.io/helm/pkg/storage"
"k8s.io/helm/pkg/storage/driver"
) )
// GoTplEngine is the name of the Go template engine, as registered in the EngineYard. // GoTplEngine is the name of the Go template engine, as registered in the EngineYard.
@ -85,56 +85,6 @@ type Engine interface {
Render(*chart.Chart, chartutil.Values) (map[string]string, error) Render(*chart.Chart, chartutil.Values) (map[string]string, error)
} }
// ReleaseStorage represents a storage engine for a Release.
//
// Release storage must be concurrency safe.
type ReleaseStorage interface {
// Create stores a release in the storage.
//
// If a release with the same name exists, this returns an error.
//
// It may return other errors in cases where it cannot write to storage.
Create(*release.Release) error
// Read takes a name and returns a release that has that name.
//
// It will only return releases that are not deleted and not superseded.
//
// It will return an error if no relevant release can be found, or if storage
// is not properly functioning.
Read(name string) (*release.Release, error)
// Update looks for a release with the same name and updates it with the
// present release contents.
//
// For immutable storage backends, this may result in a new release record
// being created, and the previous release being marked as superseded.
//
// It will return an error if a previous release is not found. It may also
// return an error if the storage backend encounters an error.
Update(*release.Release) error
// Delete marks a Release as deleted.
//
// It returns the deleted record. If the record is not found or if the
// underlying storage encounters an error, this will return an error.
Delete(name string) (*release.Release, error)
// List lists all active (non-deleted, non-superseded) releases.
//
// To get deleted or superseded releases, use Query.
List() ([]*release.Release, error)
// Query takes a map of labels and returns any releases that match.
//
// Query will search all releases, including deleted and superseded ones.
// The provided map will be used to filter results.
Query(map[string]string) ([]*release.Release, error)
// History takes a release name and returns the history of releases.
History(name string) ([]*release.Release, error)
}
// KubeClient represents a client capable of communicating with the Kubernetes API. // KubeClient represents a client capable of communicating with the Kubernetes API.
// //
// A KubeClient must be concurrency safe. // A KubeClient must be concurrency safe.
@ -196,7 +146,7 @@ type Environment struct {
// EngineYard provides access to the known template engines. // EngineYard provides access to the known template engines.
EngineYard EngineYard EngineYard EngineYard
// Releases stores records of releases. // Releases stores records of releases.
Releases ReleaseStorage Releases *storage.Storage
// KubeClient is a Kubernetes API client. // KubeClient is a Kubernetes API client.
KubeClient KubeClient KubeClient KubeClient
} }
@ -211,7 +161,7 @@ func New() *Environment {
} }
return &Environment{ return &Environment{
EngineYard: ey, EngineYard: ey,
Releases: storage.NewMemory(), Releases: storage.Init(driver.NewMemory()),
KubeClient: kube.New(nil), //&PrintingKubeClient{Out: os.Stdout}, KubeClient: kube.New(nil), //&PrintingKubeClient{Out: os.Stdout},
} }
} }

@ -34,7 +34,7 @@ import (
"k8s.io/helm/pkg/proto/hapi/chart" "k8s.io/helm/pkg/proto/hapi/chart"
"k8s.io/helm/pkg/proto/hapi/release" "k8s.io/helm/pkg/proto/hapi/release"
"k8s.io/helm/pkg/proto/hapi/services" "k8s.io/helm/pkg/proto/hapi/services"
"k8s.io/helm/pkg/storage" "k8s.io/helm/pkg/storage/driver"
"k8s.io/helm/pkg/timeconv" "k8s.io/helm/pkg/timeconv"
) )
@ -62,7 +62,7 @@ type releaseServer struct {
} }
func (s *releaseServer) ListReleases(req *services.ListReleasesRequest, stream services.ReleaseService_ListReleasesServer) error { func (s *releaseServer) ListReleases(req *services.ListReleasesRequest, stream services.ReleaseService_ListReleasesServer) error {
rels, err := s.env.Releases.List() rels, err := s.env.Releases.ListReleases()
if err != nil { if err != nil {
return err return err
} }
@ -152,7 +152,7 @@ func (s *releaseServer) GetReleaseStatus(c ctx.Context, req *services.GetRelease
if req.Name == "" { if req.Name == "" {
return nil, errMissingRelease return nil, errMissingRelease
} }
rel, err := s.env.Releases.Read(req.Name) rel, err := s.env.Releases.Get(req.Name)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -166,7 +166,7 @@ func (s *releaseServer) GetReleaseContent(c ctx.Context, req *services.GetReleas
if req.Name == "" { if req.Name == "" {
return nil, errMissingRelease return nil, errMissingRelease
} }
rel, err := s.env.Releases.Read(req.Name) rel, err := s.env.Releases.Get(req.Name)
return &services.GetReleaseContentResponse{Release: rel}, err return &services.GetReleaseContentResponse{Release: rel}, err
} }
@ -192,7 +192,7 @@ func (s *releaseServer) prepareUpdate(req *services.UpdateReleaseRequest) (*rele
} }
// finds the non-deleted release with the given name // finds the non-deleted release with the given name
rel, err := s.env.Releases.Read(req.Name) rel, err := s.env.Releases.Get(req.Name)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -238,7 +238,7 @@ func (s *releaseServer) uniqName(start string, reuse bool) (string, error) {
// is granted. If reuse is true and a deleted release with that name exists, // is granted. If reuse is true and a deleted release with that name exists,
// we re-grant it. Otherwise, an error is returned. // we re-grant it. Otherwise, an error is returned.
if start != "" { if start != "" {
if rel, err := s.env.Releases.Read(start); err == storage.ErrNotFound { if rel, err := s.env.Releases.Get(start); err == driver.ErrReleaseNotFound {
return start, nil return start, nil
} else if reuse && rel.Info.Status.Code == release.Status_DELETED { } else if reuse && rel.Info.Status.Code == release.Status_DELETED {
// Allowe re-use of names if the previous release is marked deleted. // Allowe re-use of names if the previous release is marked deleted.
@ -253,7 +253,7 @@ func (s *releaseServer) uniqName(start string, reuse bool) (string, error) {
for i := 0; i < maxTries; i++ { for i := 0; i < maxTries; i++ {
namer := moniker.New() namer := moniker.New()
name := namer.NameSep("-") name := namer.NameSep("-")
if _, err := s.env.Releases.Read(name); err == storage.ErrNotFound { if _, err := s.env.Releases.Get(name); err == driver.ErrReleaseNotFound {
return name, nil return name, nil
} }
log.Printf("info: Name %q is taken. Searching again.", name) log.Printf("info: Name %q is taken. Searching again.", name)
@ -446,7 +446,7 @@ func (s *releaseServer) UninstallRelease(c ctx.Context, req *services.UninstallR
return nil, errMissingRelease return nil, errMissingRelease
} }
rel, err := s.env.Releases.Read(req.Name) rel, err := s.env.Releases.Get(req.Name)
if err != nil { if err != nil {
log.Printf("uninstall: Release not loaded: %s", req.Name) log.Printf("uninstall: Release not loaded: %s", req.Name)
return nil, err return nil, err

@ -165,7 +165,7 @@ func TestInstallRelease(t *testing.T) {
t.Errorf("Expected release namespace 'spaced', got '%s'.", res.Release.Namespace) t.Errorf("Expected release namespace 'spaced', got '%s'.", res.Release.Namespace)
} }
rel, err := rs.env.Releases.Read(res.Release.Name) rel, err := rs.env.Releases.Get(res.Release.Name)
if err != nil { if err != nil {
t.Errorf("Expected release for %s (%v).", res.Release.Name, rs.env.Releases) t.Errorf("Expected release for %s (%v).", res.Release.Name, rs.env.Releases)
} }
@ -235,7 +235,7 @@ func TestInstallReleaseDryRun(t *testing.T) {
t.Errorf("Should not contain template data for an empty file. %s", res.Release.Manifest) t.Errorf("Should not contain template data for an empty file. %s", res.Release.Manifest)
} }
if _, err := rs.env.Releases.Read(res.Release.Name); err == nil { if _, err := rs.env.Releases.Get(res.Release.Name); err == nil {
t.Errorf("Expected no stored release.") t.Errorf("Expected no stored release.")
} }

Loading…
Cancel
Save