@ -26,6 +26,7 @@ import (
"sort"
"strings"
"github.com/ghodss/yaml"
"github.com/technosophos/moniker"
ctx "golang.org/x/net/context"
@ -218,10 +219,15 @@ func (s *releaseServer) engine(ch *chart.Chart) environment.Engine {
func ( s * releaseServer ) InstallRelease ( c ctx . Context , req * services . InstallReleaseRequest ) ( * services . InstallReleaseResponse , error ) {
rel , err := s . prepareRelease ( req )
if err != nil {
log . Printf ( "Failed install prepare step: %s" , err )
return nil , err
}
return s . performRelease ( rel , req )
res , err := s . performRelease ( rel , req )
if err != nil {
log . Printf ( "Failed install perform step: %s" , err )
}
return res , err
}
// prepareRelease builds a release for an install operation.
@ -247,7 +253,12 @@ func (s *releaseServer) prepareRelease(req *services.InstallReleaseRequest) (*re
if err != nil {
return nil , err
}
hooks , manifests := sortHooks ( files )
hooks , manifests , err := sortHooks ( files )
if err != nil {
// By catching parse errors here, we can prevent bogus releases from going
// to Kubernetes.
return nil , err
}
// Aggregate all non-hooks into one big doc.
b := bytes . NewBuffer ( nil )
@ -282,6 +293,12 @@ func (s *releaseServer) prepareRelease(req *services.InstallReleaseRequest) (*re
return rel , nil
}
// validateYAML checks to see if YAML is well-formed.
func validateYAML ( data string ) error {
b := map [ string ] interface { } { }
return yaml . Unmarshal ( [ ] byte ( data ) , b )
}
// performRelease runs a release.
func ( s * releaseServer ) performRelease ( r * release . Release , req * services . InstallReleaseRequest ) ( * services . InstallReleaseResponse , error ) {
res := & services . InstallReleaseResponse { Release : r }