//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
}
Esempio n. 2
0
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
}