func (m *InstanceManager) LocateInterface( network *types.VirtualNetwork, instance *types.VirtualMachine) *types.VirtualMachineInterface { tenant := network.GetFQName()[len(network.GetFQName())-2] fqn := interfaceFQName(m.config.DefaultDomain, tenant, instance.GetName()) obj, err := m.client.FindByName( "virtual-machine-interface", strings.Join(fqn, ":")) if err == nil { nic := obj.(*types.VirtualMachineInterface) // TODO(prm): ensure network is as expected, else update. return nic } nic := new(types.VirtualMachineInterface) nic.SetFQName("project", fqn) nic.AddVirtualMachine(instance) if network != nil { nic.AddVirtualNetwork(network) } err = m.client.Create(nic) if err != nil { glog.Errorf("Create interface %s: %v", instance.GetName(), err) return nil } obj, err = m.client.FindByUuid(nic.GetType(), nic.GetUuid()) if err != nil { glog.Errorf("Get vmi %s: %v", nic.GetUuid(), err) return nil } return obj.(*types.VirtualMachineInterface) }