func (i *importer) makeUnitDoc(s description.Application, u description.Unit) (*unitDoc, error) { // NOTE: if we want to support units having different charms deployed // than the application recomments and migrate that, then we should serialize // the charm url for each unit rather than grabbing the applications charm url. // Currently the units charm url matching the application is a precondiation // to migration. charmUrl, err := charm.ParseURL(s.CharmURL()) if err != nil { return nil, errors.Trace(err) } var subordinates []string if subs := u.Subordinates(); len(subs) > 0 { for _, s := range subs { subordinates = append(subordinates, s.Id()) } } return &unitDoc{ Name: u.Name(), Application: s.Name(), Series: s.Series(), CharmURL: charmUrl, Principal: u.Principal().Id(), Subordinates: subordinates, StorageAttachmentCount: i.unitStorageAttachmentCount(u.Tag()), MachineId: u.Machine().Id(), Tools: i.makeTools(u.Tools()), Life: Alive, PasswordHash: u.PasswordHash(), }, nil }
func (e *exporter) setUnitPayloads(exUnit description.Unit, payloads []payload.FullPayloadInfo) error { unitID := exUnit.Tag().Id() machineID := exUnit.Machine().Id() for _, payload := range payloads { if payload.Machine != machineID { return errors.NotValidf("payload for unit %q reports wrong machine %q (should be %q)", unitID, payload.Machine, machineID) } args := description.PayloadArgs{ Name: payload.Name, Type: payload.Type, RawID: payload.ID, State: payload.Status, Labels: payload.Labels, } exUnit.AddPayload(args) } return nil }