From ebd4ab57b17caed767771c4184b6fc99495c71b0 Mon Sep 17 00:00:00 2001 From: Brendan Melville Date: Wed, 11 Nov 2015 16:58:22 -0800 Subject: [PATCH 1/2] 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. --- expandybird/service/service.go | 4 ++-- manager/manager/deployer.go | 12 ++++++------ manager/manager/expander.go | 32 ++++++++++++++++---------------- 3 files changed, 24 insertions(+), 24 deletions(-) diff --git a/expandybird/service/service.go b/expandybird/service/service.go index c27aba6b8..3e1c0a78a 100644 --- a/expandybird/service/service.go +++ b/expandybird/service/service.go @@ -68,14 +68,14 @@ func NewExpansionHandler(backend expander.Expander) restful.RouteFunction { output, err := backend.ExpandTemplate(template) 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) return } response, err := expander.NewExpansionResponse(output) 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) return } diff --git a/manager/manager/deployer.go b/manager/manager/deployer.go index aca278557..430b22367 100644 --- a/manager/manager/deployer.go +++ b/manager/manager/deployer.go @@ -100,7 +100,7 @@ func (d *deployer) PutConfiguration(configuration *Configuration) error { func (d *deployer) callServiceWithConfiguration(method, operation string, configuration *Configuration) 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) @@ -129,14 +129,14 @@ func (d *deployer) callService(method, url string, reader io.Reader, callback fo } defer response.Body.Close() - if response.StatusCode < http.StatusOK || - response.StatusCode >= http.StatusMultipleChoices { - err := fmt.Errorf("deployer service response:\n%v\n", response) + body, err := ioutil.ReadAll(response.Body) + if err != nil { return nil, callback(err) } - body, err := ioutil.ReadAll(response.Body) - if err != nil { + if response.StatusCode < http.StatusOK || + response.StatusCode >= http.StatusMultipleChoices { + err := fmt.Errorf("resourcifier response:\n%s", body) return nil, callback(err) } diff --git a/manager/manager/expander.go b/manager/manager/expander.go index 0a80f9a65..3456f8571 100644 --- a/manager/manager/expander.go +++ b/manager/manager/expander.go @@ -54,7 +54,7 @@ func (e *expander) getBaseURL() string { } 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 @@ -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. config := &Configuration{} 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 } @@ -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. newImp, err := e.typeResolver.ResolveTypes(config, t.Imports) 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) } @@ -137,7 +137,7 @@ func (e *expander) ExpandTemplate(t Template) (*ExpandedTemplate, error) { // Now expand with everything imported. result, err := e.expandTemplate(&t) if err != nil { - e := fmt.Errorf("template expansion:%s\n", err) + e := fmt.Errorf("template expansion: %s", err) return nil, expanderError(&t, e) } @@ -152,7 +152,7 @@ func (e *expander) ExpandTemplate(t Template) (*ExpandedTemplate, error) { newImp, err = e.typeResolver.ResolveTypes(result.Config, 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) } @@ -167,7 +167,7 @@ func (e *expander) ExpandTemplate(t Template) (*ExpandedTemplate, error) { content, err = yaml.Marshal(result.Config) t.Content = string(content) 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) return nil, expanderError(&t, e) } @@ -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))) if err != nil { - e := fmt.Errorf("http POST failed:%s\n", err) + e := fmt.Errorf("http POST failed: %s", err) 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) if err != nil { - e := fmt.Errorf("error reading response:%s\n", err) + e := fmt.Errorf("error reading response: %s", err) return nil, e } + if response.StatusCode != http.StatusOK { + err := fmt.Errorf("expandybird response:\n%s", body) + return nil, err + } + er := &ExpansionResponse{} 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 } template, err := er.Unmarshal() 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 } From 4965c3ac0ca27f4038cf4ce08907add8fb2dd07d Mon Sep 17 00:00:00 2001 From: Brendan Melville Date: Wed, 11 Nov 2015 17:00:17 -0800 Subject: [PATCH 2/2] Adding an example config to the redis type. This will allow for testing of the type locally. --- types/redis/v1/redis.yaml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 types/redis/v1/redis.yaml diff --git a/types/redis/v1/redis.yaml b/types/redis/v1/redis.yaml new file mode 100644 index 000000000..12901829d --- /dev/null +++ b/types/redis/v1/redis.yaml @@ -0,0 +1,7 @@ +imports: +- path: redis.jinja + +resources: +- name: redis + type: redis.jinja + properties: null