//ExtractBindings gets bindings from created RawServiceMap func ExtractBindings(yamlContent []byte) (BindingProperty, error) { var rawConfigDocker config.RawServiceMap var bindingsMap map[string]ServiceBinding var bindingPropertyMap BindingProperty var labels libYaml.SliceorMap config, err := config.CreateConfig(yamlContent) if err != nil { return nil, err } rawConfigDocker = config.Services preProcessServiceMap := preprocess.PreprocessServiceMap(nil) rawConfigDocker, err = preProcessServiceMap(rawConfigDocker) if err != nil { log.Errorf("Error during preprocess : %v\n", err) return nil, err } bindingsMap = make(map[string]ServiceBinding) bindingPropertyMap = make(map[string]interface{}) for key := range rawConfigDocker { if _, serviceParsed := bindingsMap[key]; serviceParsed { log.Debugf("Service bindings already provided") continue } newServiceBinding := ServiceBinding{} newServiceBinding.Labels = MapLabel{} newServiceBinding.Ports = PortArray{} if rawConfigDocker[key]["labels"] != nil { err := utils.Convert(rawConfigDocker[key]["labels"], &labels) if err != nil { return nil, err } for k, v := range labels { newServiceBinding.Labels[k] = v } } if rawConfigDocker[key]["ports"] != nil { for _, port := range rawConfigDocker[key]["ports"].([]interface{}) { newServiceBinding.Ports = append(newServiceBinding.Ports, port) } } bindingsMap[key] = newServiceBinding } bindingPropertyMap["services"] = bindingsMap return bindingPropertyMap, nil }
func NewProject(context *Context) (*project.Project, error) { context.ServiceFactory = &RancherServiceFactory{ Context: context, } context.VolumesFactory = &RancherVolumesFactory{ Context: context, } if context.Binding != nil { bindingBytes, err := json.Marshal(context.Binding) if err != nil { return nil, err } context.BindingsBytes = bindingBytes } if context.BindingsBytes == nil { if context.BindingsFile != "" { bindingsContent, err := ioutil.ReadFile(context.BindingsFile) if err != nil { return nil, err } context.BindingsBytes = bindingsContent } } preProcessServiceMap := preprocess.PreprocessServiceMap(context.BindingsBytes) p := project.NewProject(&context.Context, nil, &config.ParseOptions{ Interpolate: true, Validate: true, Preprocess: preProcessServiceMap, }) err := p.Parse() if err != nil { return nil, err } if err = context.open(); err != nil { logrus.Errorf("Failed to open project %s: %v", p.Name, err) return nil, err } p.Name = context.ProjectName context.SidekickInfo = NewSidekickInfo(p) return p, err }