Merge pull request #578 from jackgr/pluggable-services

Pluggable services
pull/583/head
Jack Greenfield 9 years ago
commit cfe793a27d

@ -90,14 +90,15 @@ func (e *expander) expandConfiguration(conf *common.Configuration) (*ExpandedCon
} }
defer cbr.Close() defer cbr.Close()
expander := cbr.Chartfile().Expander
if expander != nil && expander.Name != "" {
// Load the charts contents into strings that we can pass to exapnsion // Load the charts contents into strings that we can pass to exapnsion
content, err := cbr.LoadContent() content, err := cbr.LoadContent()
if err != nil { if err != nil {
return nil, err return nil, err
} }
expander := cbr.Chartfile().Expander
if expander != nil && expander.Name != "" {
// Build a request to the expansion service and call it to do the expansion // Build a request to the expansion service and call it to do the expansion
svcReq := &expansion.ServiceRequest{ svcReq := &expansion.ServiceRequest{
ChartInvocation: resource, ChartInvocation: resource,
@ -120,8 +121,28 @@ func (e *expander) expandConfiguration(conf *common.Configuration) (*ExpandedCon
// This was not a primitive resource, so add its properties to the layout // This was not a primitive resource, so add its properties to the layout
// Then add the all of the layout resources returned by the recursion to the layout // Then add the all of the layout resources returned by the recursion to the layout
layout.Properties = resource.Properties
layout.Resources = expConf.Layout.Resources layout.Resources = expConf.Layout.Resources
layout.Properties = resource.Properties
} else {
// Raise an error if a non template chart supplies properties
if resource.Properties != nil {
return nil, fmt.Errorf("properties provided for non template chart %s", resource.Type)
}
additions = []*common.Resource{}
for _, member := range content.Members {
segments := strings.Split(member.Path, "/")
if len(segments) > 1 && segments[0] == "templates" {
if strings.HasSuffix(member.Path, "yaml") || strings.HasSuffix(member.Path, "json") {
resource, err := util.ParseKubernetesObject(member.Content)
if err != nil {
return nil, err
}
resources = append(resources, resource)
}
}
}
} }
} }
@ -130,10 +151,12 @@ func (e *expander) expandConfiguration(conf *common.Configuration) (*ExpandedCon
} }
// All done with this level, so return the expanded configuration // All done with this level, so return the expanded configuration
return &ExpandedConfiguration{ result := &ExpandedConfiguration{
Config: &common.Configuration{Resources: resources}, Config: &common.Configuration{Resources: resources},
Layout: &common.Layout{Resources: layouts}, Layout: &common.Layout{Resources: layouts},
}, nil }
return result, nil
} }
func (e *expander) callService(svcName string, svcReq *expansion.ServiceRequest) (*common.Configuration, error) { func (e *expander) callService(svcName string, svcReq *expansion.ServiceRequest) (*common.Configuration, error) {

@ -20,6 +20,7 @@ import (
"fmt" "fmt"
"log" "log"
"net" "net"
"net/url"
"os" "os"
"strings" "strings"
) )
@ -77,7 +78,13 @@ func GetServiceURL(serviceName, servicePort, serviceURL string) (string, error)
varName := strings.ToUpper(varBase) + "_PORT" varName := strings.ToUpper(varBase) + "_PORT"
serviceURL := os.Getenv(varName) serviceURL := os.Getenv(varName)
if serviceURL != "" { if serviceURL != "" {
return strings.Replace(serviceURL, "tcp", "http", 1), nil u, err := url.Parse(serviceURL)
if err != nil || u.Path != "" || u.Scheme != "tcp" {
return "", fmt.Errorf("malformed value: %s for envinronment variable: %s", serviceURL, varName)
}
u.Scheme = "http"
return u.String(), nil
} }
if servicePort != "" { if servicePort != "" {

@ -28,18 +28,24 @@ import (
func ParseKubernetesObject(object []byte) (*common.Resource, error) { func ParseKubernetesObject(object []byte) (*common.Resource, error) {
o := &KubernetesObject{} o := &KubernetesObject{}
if err := yaml.Unmarshal(object, &o); err != nil { if err := yaml.Unmarshal(object, &o); err != nil {
return nil, fmt.Errorf("cannot unmarshal native kubernetes object (%#v)", err) return nil, fmt.Errorf("cannot unmarshal native kubernetes object (%s): %s", object, err)
} }
// Ok, it appears to be a valid object, create a Resource out of it. // Ok, it appears to be a valid object, create a Resource out of it.
r := &common.Resource{} r := &common.Resource{}
r.Name = getRandomName(o.Metadata["name"].(string)) md, ok := o.Metadata["name"].(string)
if !ok {
return nil, fmt.Errorf("cannot parse native kubernetes object (%s)", object)
}
r.Name = getRandomName(md)
r.Type = o.Kind r.Type = o.Kind
r.Properties = make(map[string]interface{}) r.Properties = make(map[string]interface{})
if err := yaml.Unmarshal(object, &r.Properties); err != nil { if err := yaml.Unmarshal(object, &r.Properties); err != nil {
return nil, fmt.Errorf("cannot unmarshal native kubernetes object (%#v)", err) return nil, fmt.Errorf("cannot unmarshal native kubernetes object (%s): %s", object, err)
} }
return r, nil return r, nil
} }

Loading…
Cancel
Save