//lets make boxes with components to be mutated later or, and the required //information for a launch. //A "colored component" externalized with what we need. func (a *Assembly) mkBoxes(aies string) ([]provision.Box, error) { newBoxs := make([]provision.Box, 0, len(a.Components)) for _, comp := range a.Components { if len(strings.TrimSpace(comp.Id)) > 1 { if b, err := comp.mkBox(); err != nil { return nil, err } else { b.CartonId = a.Id b.CartonsId = aies b.CartonName = a.Name if len(strings.TrimSpace(b.Provider)) <= 0 { b.Provider = a.provider() } if len(strings.TrimSpace(b.PublicIp)) <= 0 { b.PublicIp = a.publicIp() } if b.Repo.IsEnabled() { b.Repo.Hook.CartonId = a.Id //this is screwy, why do we need it. b.Repo.Hook.BoxId = comp.Id } b.Compute = a.newCompute() b.SSH = a.newSSH() b.Status = utils.Status(a.Status) b.State = utils.State(a.State) newBoxs = append(newBoxs, b) } } } return newBoxs, nil }
//Assembly into a carton. //a carton comprises of self contained boxes func mkCarton(aies string, ay string) (*Carton, error) { a, err := get(ay) if err != nil { return nil, err } b, err := a.mkBoxes(aies) if err != nil { return nil, err } c := &Carton{ Id: ay, //assembly id CartonsId: aies, //assemblies id Name: a.Name, Tosca: a.Tosca, ImageVersion: a.imageVersion(), DomainName: a.domain(), Compute: a.newCompute(), SSH: a.newSSH(), Provider: a.provider(), PublicIp: a.publicIp(), Boxes: &b, Status: utils.Status(a.Status), State: utils.State(a.State), } log.Debugf("Carton %v", c) return c, nil }
//make a box with the details for a provisioner. func (c *Component) mkBox() (provision.Box, error) { bt := provision.Box{ Id: c.Id, Level: provision.BoxSome, Name: c.Name, DomainName: c.domain(), Envs: c.envs(), Tosca: c.Tosca, Operations: c.Operations, Commit: "", Provider: c.provider(), PublicIp: c.publicIp(), Inputs: c.getInputsMap(), State: utils.State(c.State), } if &c.Repo != nil { bt.Repo = &repository.Repo{ Type: c.Repo.Rtype, Branch: c.Repo.Branch, Source: c.Repo.Source, OneClick: c.withOneClick(), URL: c.Repo.Rurl, } bt.Repo.Hook = upgrade.BuildHook(c.Operations, repository.CIHOOK) //MEGAMD } return bt, nil }