Commit ebd4ab57 authored by Brendan Melville's avatar Brendan Melville

Resourcifier and expandybird errors now propagate through API.

This also cleans up some error messages that were adding lots of
newlines to the end of errors as they passed through the system.
parent 1cff534a
...@@ -68,14 +68,14 @@ func NewExpansionHandler(backend expander.Expander) restful.RouteFunction { ...@@ -68,14 +68,14 @@ func NewExpansionHandler(backend expander.Expander) restful.RouteFunction {
output, err := backend.ExpandTemplate(template) output, err := backend.ExpandTemplate(template)
if err != nil { if err != nil {
message := fmt.Sprintf("error (%s) expanding template:\n%v\n", err, template) message := fmt.Sprintf("error expanding template: %s", err)
logAndReturnErrorFromHandler(http.StatusBadRequest, message, resp) logAndReturnErrorFromHandler(http.StatusBadRequest, message, resp)
return return
} }
response, err := expander.NewExpansionResponse(output) response, err := expander.NewExpansionResponse(output)
if err != nil { if err != nil {
message := fmt.Sprintf("error (%s) marshaling output:\n%v\n", err, output) message := fmt.Sprintf("error marshaling output: %s", err)
logAndReturnErrorFromHandler(http.StatusBadRequest, message, resp) logAndReturnErrorFromHandler(http.StatusBadRequest, message, resp)
return return
} }
......
...@@ -100,7 +100,7 @@ func (d *deployer) PutConfiguration(configuration *Configuration) error { ...@@ -100,7 +100,7 @@ func (d *deployer) PutConfiguration(configuration *Configuration) error {
func (d *deployer) callServiceWithConfiguration(method, operation string, configuration *Configuration) error { func (d *deployer) callServiceWithConfiguration(method, operation string, configuration *Configuration) error {
callback := func(e error) error { callback := func(e error) error {
return fmt.Errorf("cannot %s configuration (%s)", operation, e) return fmt.Errorf("cannot %s configuration: %s", operation, e)
} }
y, err := yaml.Marshal(configuration) y, err := yaml.Marshal(configuration)
...@@ -129,14 +129,14 @@ func (d *deployer) callService(method, url string, reader io.Reader, callback fo ...@@ -129,14 +129,14 @@ func (d *deployer) callService(method, url string, reader io.Reader, callback fo
} }
defer response.Body.Close() defer response.Body.Close()
if response.StatusCode < http.StatusOK || body, err := ioutil.ReadAll(response.Body)
response.StatusCode >= http.StatusMultipleChoices { if err != nil {
err := fmt.Errorf("deployer service response:\n%v\n", response)
return nil, callback(err) return nil, callback(err)
} }
body, err := ioutil.ReadAll(response.Body) if response.StatusCode < http.StatusOK ||
if err != nil { response.StatusCode >= http.StatusMultipleChoices {
err := fmt.Errorf("resourcifier response:\n%s", body)
return nil, callback(err) return nil, callback(err)
} }
......
...@@ -54,7 +54,7 @@ func (e *expander) getBaseURL() string { ...@@ -54,7 +54,7 @@ func (e *expander) getBaseURL() string {
} }
func expanderError(t *Template, err error) error { func expanderError(t *Template, err error) error {
return fmt.Errorf("cannot expand template named %s (%s):\n%s\n", t.Name, err, t.Content) return fmt.Errorf("cannot expand template named %s (%s):\n%s", t.Name, err, t.Content)
} }
// ExpanderResponse gives back a layout, which has nested structure // ExpanderResponse gives back a layout, which has nested structure
...@@ -117,7 +117,7 @@ func (e *expander) ExpandTemplate(t Template) (*ExpandedTemplate, error) { ...@@ -117,7 +117,7 @@ func (e *expander) ExpandTemplate(t Template) (*ExpandedTemplate, error) {
// 4. If type resolution resulted in new imports being available, return to 2. // 4. If type resolution resulted in new imports being available, return to 2.
config := &Configuration{} config := &Configuration{}
if err := yaml.Unmarshal([]byte(t.Content), config); err != nil { if err := yaml.Unmarshal([]byte(t.Content), config); err != nil {
e := fmt.Errorf("Unable to unmarshal configuration (%s): %s\n", err, t.Content) e := fmt.Errorf("Unable to unmarshal configuration (%s): %s", err, t.Content)
return nil, e return nil, e
} }
...@@ -127,7 +127,7 @@ func (e *expander) ExpandTemplate(t Template) (*ExpandedTemplate, error) { ...@@ -127,7 +127,7 @@ func (e *expander) ExpandTemplate(t Template) (*ExpandedTemplate, error) {
// Start things off by attempting to resolve the templates in a first pass. // Start things off by attempting to resolve the templates in a first pass.
newImp, err := e.typeResolver.ResolveTypes(config, t.Imports) newImp, err := e.typeResolver.ResolveTypes(config, t.Imports)
if err != nil { if err != nil {
e := fmt.Errorf("type resolution failed:%s\n", err) e := fmt.Errorf("type resolution failed: %s", err)
return nil, expanderError(&t, e) return nil, expanderError(&t, e)
} }
...@@ -137,7 +137,7 @@ func (e *expander) ExpandTemplate(t Template) (*ExpandedTemplate, error) { ...@@ -137,7 +137,7 @@ func (e *expander) ExpandTemplate(t Template) (*ExpandedTemplate, error) {
// Now expand with everything imported. // Now expand with everything imported.
result, err := e.expandTemplate(&t) result, err := e.expandTemplate(&t)
if err != nil { if err != nil {
e := fmt.Errorf("template expansion:%s\n", err) e := fmt.Errorf("template expansion: %s", err)
return nil, expanderError(&t, e) return nil, expanderError(&t, e)
} }
...@@ -152,7 +152,7 @@ func (e *expander) ExpandTemplate(t Template) (*ExpandedTemplate, error) { ...@@ -152,7 +152,7 @@ func (e *expander) ExpandTemplate(t Template) (*ExpandedTemplate, error) {
newImp, err = e.typeResolver.ResolveTypes(result.Config, nil) newImp, err = e.typeResolver.ResolveTypes(result.Config, nil)
if err != nil { if err != nil {
e := fmt.Errorf("type resolution failed:%s\n", err) e := fmt.Errorf("type resolution failed: %s", err)
return nil, expanderError(&t, e) return nil, expanderError(&t, e)
} }
...@@ -167,7 +167,7 @@ func (e *expander) ExpandTemplate(t Template) (*ExpandedTemplate, error) { ...@@ -167,7 +167,7 @@ func (e *expander) ExpandTemplate(t Template) (*ExpandedTemplate, error) {
content, err = yaml.Marshal(result.Config) content, err = yaml.Marshal(result.Config)
t.Content = string(content) t.Content = string(content)
if err != nil { if err != nil {
e := fmt.Errorf("Unable to unmarshal response from expander (%s): %s\n", e := fmt.Errorf("Unable to unmarshal response from expander (%s): %s",
err, result.Config) err, result.Config)
return nil, expanderError(&t, e) return nil, expanderError(&t, e)
} }
...@@ -183,31 +183,31 @@ func (e *expander) expandTemplate(t *Template) (*ExpandedTemplate, error) { ...@@ -183,31 +183,31 @@ func (e *expander) expandTemplate(t *Template) (*ExpandedTemplate, error) {
response, err := http.Post(e.getBaseURL(), "application/json", ioutil.NopCloser(bytes.NewReader(j))) response, err := http.Post(e.getBaseURL(), "application/json", ioutil.NopCloser(bytes.NewReader(j)))
if err != nil { if err != nil {
e := fmt.Errorf("http POST failed:%s\n", err) e := fmt.Errorf("http POST failed: %s", err)
return nil, e return nil, e
} }
defer response.Body.Close()
if response.StatusCode != http.StatusOK {
err := fmt.Errorf("expander service response:%v", response)
return nil, err
}
defer response.Body.Close()
body, err := ioutil.ReadAll(response.Body) body, err := ioutil.ReadAll(response.Body)
if err != nil { if err != nil {
e := fmt.Errorf("error reading response:%s\n", err) e := fmt.Errorf("error reading response: %s", err)
return nil, e return nil, e
} }
if response.StatusCode != http.StatusOK {
err := fmt.Errorf("expandybird response:\n%s", body)
return nil, err
}
er := &ExpansionResponse{} er := &ExpansionResponse{}
if err := json.Unmarshal(body, er); err != nil { if err := json.Unmarshal(body, er); err != nil {
e := fmt.Errorf("cannot unmarshal response body (%s):%s\n", err, body) e := fmt.Errorf("cannot unmarshal response body (%s):%s", err, body)
return nil, e return nil, e
} }
template, err := er.Unmarshal() template, err := er.Unmarshal()
if err != nil { if err != nil {
e := fmt.Errorf("cannot unmarshal response yaml (%s):%v\n", err, er) e := fmt.Errorf("cannot unmarshal response yaml (%s):%v", err, er)
return nil, e return nil, e
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment