update tiller environment & release server to use new storage

This commit is contained in:
fibonacci1729 2016-08-08 09:34:19 -06:00
parent 0e26f20268
commit 74deac940b
3 changed files with 13 additions and 63 deletions

View File

@ -29,8 +29,8 @@ import (
"k8s.io/helm/pkg/engine"
"k8s.io/helm/pkg/kube"
"k8s.io/helm/pkg/proto/hapi/chart"
"k8s.io/helm/pkg/proto/hapi/release"
"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.
@ -85,56 +85,6 @@ type Engine interface {
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.
//
// A KubeClient must be concurrency safe.
@ -196,7 +146,7 @@ type Environment struct {
// EngineYard provides access to the known template engines.
EngineYard EngineYard
// Releases stores records of releases.
Releases ReleaseStorage
Releases *storage.Storage
// KubeClient is a Kubernetes API client.
KubeClient KubeClient
}
@ -211,7 +161,7 @@ func New() *Environment {
}
return &Environment{
EngineYard: ey,
Releases: storage.NewMemory(),
Releases: storage.Init(driver.NewMemory()),
KubeClient: kube.New(nil), //&PrintingKubeClient{Out: os.Stdout},
}
}

View File

@ -34,7 +34,7 @@ import (
"k8s.io/helm/pkg/proto/hapi/chart"
"k8s.io/helm/pkg/proto/hapi/release"
"k8s.io/helm/pkg/proto/hapi/services"
"k8s.io/helm/pkg/storage"
"k8s.io/helm/pkg/storage/driver"
"k8s.io/helm/pkg/timeconv"
)
@ -62,7 +62,7 @@ type releaseServer struct {
}
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 {
return err
}
@ -152,7 +152,7 @@ func (s *releaseServer) GetReleaseStatus(c ctx.Context, req *services.GetRelease
if req.Name == "" {
return nil, errMissingRelease
}
rel, err := s.env.Releases.Read(req.Name)
rel, err := s.env.Releases.Get(req.Name)
if err != nil {
return nil, err
}
@ -166,7 +166,7 @@ func (s *releaseServer) GetReleaseContent(c ctx.Context, req *services.GetReleas
if req.Name == "" {
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
}
@ -192,7 +192,7 @@ func (s *releaseServer) prepareUpdate(req *services.UpdateReleaseRequest) (*rele
}
// 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 {
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,
// we re-grant it. Otherwise, an error is returned.
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
} else if reuse && rel.Info.Status.Code == release.Status_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++ {
namer := moniker.New()
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
}
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
}
rel, err := s.env.Releases.Read(req.Name)
rel, err := s.env.Releases.Get(req.Name)
if err != nil {
log.Printf("uninstall: Release not loaded: %s", req.Name)
return nil, err

View File

@ -165,7 +165,7 @@ func TestInstallRelease(t *testing.T) {
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 {
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)
}
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.")
}