123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- package controller
- import (
- "encoding/json"
- "strings"
- "github.com/gravitl/netmaker/database"
- "github.com/gravitl/netmaker/logger"
- "github.com/gravitl/netmaker/logic"
- "github.com/gravitl/netmaker/models"
- "github.com/gravitl/netmaker/servercfg"
- )
- /**
- * If being deleted by server, create a record in the DELETED_NODES_TABLE for the client to find
- * If being deleted by the client, delete completely
- */
- // DeleteNode - deletes a node
- func DeleteNode(key string, exterminate bool) error {
- var err error
- if !exterminate {
- args := strings.Split(key, "###")
- node, err := GetNode(args[0], args[1])
- if err != nil {
- return err
- }
- node.Action = models.NODE_DELETE
- nodedata, err := json.Marshal(&node)
- if err != nil {
- return err
- }
- err = database.Insert(key, string(nodedata), database.DELETED_NODES_TABLE_NAME)
- if err != nil {
- return err
- }
- } else {
- if err := database.DeleteRecord(database.DELETED_NODES_TABLE_NAME, key); err != nil {
- logger.Log(2, err.Error())
- }
- }
- if err := database.DeleteRecord(database.NODES_TABLE_NAME, key); err != nil {
- return err
- }
- if servercfg.IsDNSMode() {
- err = logic.SetDNS()
- }
- return err
- }
- // DeleteIntClient - deletes an int client
- func DeleteIntClient(clientid string) (bool, error) {
- err := database.DeleteRecord(database.INT_CLIENTS_TABLE_NAME, clientid)
- if err != nil {
- return false, err
- }
- return true, nil
- }
- // GetNode - gets a node
- func GetNode(macaddress string, network string) (models.Node, error) {
- var node models.Node
- key, err := logic.GetRecordKey(macaddress, network)
- if err != nil {
- return node, err
- }
- data, err := database.FetchRecord(database.NODES_TABLE_NAME, key)
- if err != nil {
- if data == "" {
- data, err = database.FetchRecord(database.DELETED_NODES_TABLE_NAME, key)
- err = json.Unmarshal([]byte(data), &node)
- }
- return node, err
- }
- if err = json.Unmarshal([]byte(data), &node); err != nil {
- return node, err
- }
- logic.SetNodeDefaults(&node)
- return node, err
- }
- // GetIntClient - gets int client
- func GetIntClient(clientid string) (models.IntClient, error) {
- var client models.IntClient
- value, err := database.FetchRecord(database.INT_CLIENTS_TABLE_NAME, clientid)
- if err != nil {
- return client, err
- }
- if err = json.Unmarshal([]byte(value), &client); err != nil {
- return models.IntClient{}, err
- }
- return client, nil
- }
|