func (i *importer) parentDocIDFromDevice(device description.LinkLayerDevice) (string, error) { hostMachineID, parentName, err := parseLinkLayerDeviceParentNameAsGlobalKey(device.ParentName()) if err != nil { return "", errors.Trace(err) } if hostMachineID == "" { // ParentName is not a global key, but on the same machine. hostMachineID = device.MachineID() parentName = device.ParentName() } return i.st.docID(linkLayerDeviceGlobalKey(hostMachineID, parentName)), nil }
func (i *importer) addLinkLayerDevice(device description.LinkLayerDevice) error { providerID := device.ProviderID() modelUUID := i.st.ModelUUID() localID := linkLayerDeviceGlobalKey(device.MachineID(), device.Name()) linkLayerDeviceDocID := i.st.docID(localID) newDoc := &linkLayerDeviceDoc{ ModelUUID: modelUUID, DocID: linkLayerDeviceDocID, MachineID: device.MachineID(), ProviderID: providerID, Name: device.Name(), MTU: device.MTU(), Type: LinkLayerDeviceType(device.Type()), MACAddress: device.MACAddress(), IsAutoStart: device.IsAutoStart(), IsUp: device.IsUp(), ParentName: device.ParentName(), } ops := []txn.Op{{ C: linkLayerDevicesC, Id: newDoc.DocID, Insert: newDoc, }, insertLinkLayerDevicesRefsOp(modelUUID, linkLayerDeviceDocID), } if providerID != "" { id := network.Id(providerID) ops = append(ops, i.st.networkEntityGlobalKeyOp("linklayerdevice", id)) } if err := i.st.runTransaction(ops); err != nil { return errors.Trace(err) } return nil }