func (i *importer) service(s description.Service) error { // Import this service, then soon, its units. i.logger.Debugf("importing service %s", s.Name()) // 1. construct a serviceDoc sdoc, err := i.makeServiceDoc(s) if err != nil { return errors.Trace(err) } // 2. construct a statusDoc status := s.Status() if status == nil { return errors.NotValidf("missing status") } statusDoc := i.makeStatusDoc(status) // TODO: update never set malarky... maybe... ops := addServiceOps(i.st, addServiceOpsArgs{ serviceDoc: sdoc, statusDoc: statusDoc, constraints: i.constraints(s.Constraints()), // networks TODO, // storage TODO, settings: s.Settings(), settingsRefCount: s.SettingsRefCount(), leadershipSettings: s.LeadershipSettings(), }) if err := i.st.runTransaction(ops); err != nil { return errors.Trace(err) } svc := newService(i.st, sdoc) if annotations := s.Annotations(); len(annotations) > 0 { if err := i.st.SetAnnotations(svc, annotations); err != nil { return errors.Trace(err) } } if err := i.importStatusHistory(svc.globalKey(), s.StatusHistory()); err != nil { return errors.Trace(err) } for _, unit := range s.Units() { if err := i.unit(s, unit); err != nil { return errors.Trace(err) } } if s.Leader() != "" { if err := i.st.LeadershipClaimer().ClaimLeadership( s.Name(), s.Leader(), initialLeaderClaimTime); err != nil { return errors.Trace(err) } } return nil }