Commit 84dc6c9e authored by jackgr's avatar jackgr

Load resources from non template charts

parent b5871d7a
...@@ -90,14 +90,15 @@ func (e *expander) expandConfiguration(conf *common.Configuration) (*ExpandedCon ...@@ -90,14 +90,15 @@ func (e *expander) expandConfiguration(conf *common.Configuration) (*ExpandedCon
} }
defer cbr.Close() defer cbr.Close()
// Load the charts contents into strings that we can pass to exapnsion
content, err := cbr.LoadContent()
if err != nil {
return nil, err
}
expander := cbr.Chartfile().Expander expander := cbr.Chartfile().Expander
if expander != nil && expander.Name != "" { if expander != nil && expander.Name != "" {
// Load the charts contents into strings that we can pass to exapnsion
content, err := cbr.LoadContent()
if err != nil {
return nil, err
}
// 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 ...@@ -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 ...@@ -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) {
......
...@@ -28,18 +28,24 @@ import ( ...@@ -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
} }
......
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