func handle_UnManagedNode(hostname string, ctxt string) error { sessionCopy := db.GetDatastore().Copy() defer sessionCopy.Close() coll := sessionCopy.DB(conf.SystemConfig.DBConfig.Database).C(models.COLL_NAME_STORAGE_NODES) var node models.Node err := coll.Find(bson.M{"hostname": hostname}).One(&node) if err == mgo.ErrNotFound { node.Hostname = hostname node.State = models.NODE_STATE_UNACCEPTED if node.Fingerprint, err = skyring.GetCoreNodeManager().GetFingerPrint(node.Hostname, ctxt); err != nil { logger.Get().Error(fmt.Sprintf("%s-Faild to retrive fingerprint from : %s", ctxt, node.Hostname)) return err } if err := coll.Insert(node); err != nil { logger.Get().Error(fmt.Sprintf("%s-Error adding Unmanaged node : %s. error: %v", ctxt, node.Hostname, err)) return err } return nil } return errors.New(fmt.Sprintf("Node with hostname: %v already exists", hostname)) }
func GetStorageNodeInstance(hostname string, sProfiles []models.StorageProfile, ctxt string) (*models.Node, bool) { var storage_node models.Node storage_node.Hostname = hostname storage_node.Enabled = true storage_node.NodeId, _ = salt_backend.GetNodeID(hostname, ctxt) networkInfo, err := salt_backend.GetNodeNetwork(hostname, ctxt) if err != nil { logger.Get().Error(fmt.Sprintf("%s-Error getting network details for node: %s. error: %v", ctxt, hostname, err)) return nil, false } storage_node.NetworkInfo = networkInfo addrs, err := net.LookupHost(hostname) if err != nil { logger.Get().Error(fmt.Sprintf("%s-Error looking up node IP for: %s. error: %v", ctxt, hostname, err)) return nil, false } storage_node.ManagementIP4 = addrs[0] ok, err := salt_backend.NodeUp(hostname, ctxt) if err != nil { logger.Get().Error(fmt.Sprintf("%s-Error getting status of node: %s. error: %v", ctxt, hostname, err)) return nil, false } if ok { storage_node.Status = models.NODE_STATUS_OK } else { storage_node.Status = models.NODE_STATUS_ERROR } disks, err := salt_backend.GetNodeDisk(hostname, ctxt) if err != nil { logger.Get().Error(fmt.Sprintf("%s-Error getting disk details for node: %s. error: %v", ctxt, hostname, err)) return nil, false } for _, disk := range disks { dId, err := uuid.New() if err != nil { logger.Get().Error(fmt.Sprintf("%s-Unable to generate uuid for disk : %s. error: %v", ctxt, disk.DevName, err)) return nil, false } disk.DiskId = *dId applyStorageProfile(&disk, sProfiles) storage_node.StorageDisks = append(storage_node.StorageDisks, disk) } cpus, err := salt_backend.GetNodeCpu(hostname, ctxt) if err != nil { logger.Get().Error(fmt.Sprintf("%s-Error getting cpu details for node: %s. error: %v", ctxt, hostname, err)) return nil, false } for _, cpu := range cpus { storage_node.CPUs = append(storage_node.CPUs, cpu) } osInfo, err := salt_backend.GetNodeOs(hostname, ctxt) if err != nil { logger.Get().Error(fmt.Sprintf("%s-Error getting os details for node: %s", ctxt, hostname)) return nil, false } storage_node.OS = osInfo memoryInfo, err := salt_backend.GetNodeMemory(hostname, ctxt) if err != nil { logger.Get().Error(fmt.Sprintf("%s-Error getting memory details for node: %s", ctxt, hostname)) return nil, false } storage_node.Memory = memoryInfo if !storage_node.NodeId.IsZero() && len(storage_node.NetworkInfo.Subnet) != 0 && len(storage_node.StorageDisks) != 0 { return &storage_node, true } else { return nil, false } }