mirror of
https://github.com/gravitl/netmaker.git
synced 2024-09-21 07:46:04 +08:00
initial commit
This commit is contained in:
parent
a5e6aea563
commit
9188dd2cdf
|
@ -10,11 +10,15 @@ import (
|
|||
"github.com/gravitl/netmaker/models"
|
||||
)
|
||||
|
||||
type hostNetworksUpdatePayload struct {
|
||||
Networks []string `json:"networks"`
|
||||
}
|
||||
|
||||
func hostHandlers(r *mux.Router) {
|
||||
r.HandleFunc("/api/hosts", logic.SecurityCheck(false, http.HandlerFunc(getHosts))).Methods("GET")
|
||||
r.HandleFunc("/api/hosts", logic.SecurityCheck(true, http.HandlerFunc(updateHost))).Methods("PUT")
|
||||
r.HandleFunc("/api/hosts/{hostid}", logic.SecurityCheck(true, http.HandlerFunc(deleteHost))).Methods("DELETE")
|
||||
// r.HandleFunc("/api/hosts/{hostid}/{network}", logic.SecurityCheck(false, http.HandlerFunc(getHosts))).Methods("PUT")
|
||||
r.HandleFunc("/api/hosts/{hostid}", logic.SecurityCheck(true, http.HandlerFunc(updateHostNetworks))).Methods("PUT")
|
||||
}
|
||||
|
||||
// swagger:route GET /api/hosts hosts getHosts
|
||||
|
@ -112,3 +116,38 @@ func deleteHost(w http.ResponseWriter, r *http.Request) {
|
|||
w.WriteHeader(http.StatusOK)
|
||||
json.NewEncoder(w).Encode(currHost)
|
||||
}
|
||||
|
||||
// swagger:route PUT /api/hosts hosts updateHostNetworks
|
||||
//
|
||||
// Given a list of networks, a host is updated accordingly.
|
||||
//
|
||||
// Schemes: https
|
||||
//
|
||||
// Security:
|
||||
// oauth
|
||||
//
|
||||
// Responses:
|
||||
// 200: updateHostNetworks
|
||||
func updateHostNetworks(w http.ResponseWriter, r *http.Request) {
|
||||
var payload hostNetworksUpdatePayload
|
||||
err := json.NewDecoder(r.Body).Decode(&payload)
|
||||
if err != nil {
|
||||
logger.Log(0, r.Header.Get("user"), "failed to update host networks:", err.Error())
|
||||
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
|
||||
return
|
||||
}
|
||||
|
||||
// confirm host exists
|
||||
var params = mux.Vars(r)
|
||||
hostid := params["hostid"]
|
||||
currHost, err := logic.GetHost(hostid)
|
||||
if err != nil {
|
||||
logger.Log(0, r.Header.Get("user"), "failed to find host:", err.Error())
|
||||
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
|
||||
return
|
||||
}
|
||||
|
||||
logger.Log(2, r.Header.Get("user"), "updated host", currHost.Name)
|
||||
w.WriteHeader(http.StatusOK)
|
||||
json.NewEncoder(w).Encode(payload)
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@ import (
|
|||
"fmt"
|
||||
|
||||
"github.com/gravitl/netmaker/database"
|
||||
"github.com/gravitl/netmaker/logger"
|
||||
"github.com/gravitl/netmaker/models"
|
||||
)
|
||||
|
||||
|
@ -137,3 +138,40 @@ func RemoveHost(h *models.Host) error {
|
|||
}
|
||||
return database.DeleteRecord(database.HOSTS_TABLE_NAME, h.ID.String())
|
||||
}
|
||||
|
||||
// UpdateHostNetworks - updates a given host's networks
|
||||
func UpdateHostNetworks(h *models.Host, nets []string) error {
|
||||
if len(h.Nodes) > 0 {
|
||||
for i := range h.Nodes {
|
||||
n, err := GetNodeByID(h.Nodes[i])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// loop through networks and remove need for updating existing networks
|
||||
found := false
|
||||
for j := range nets {
|
||||
if len(nets[j]) > 0 && nets[j] == n.Network {
|
||||
nets[j] = "" // mark as ignore
|
||||
found = true
|
||||
}
|
||||
}
|
||||
if !found { // remove the node/host from that network
|
||||
if err = DeleteNodeByID(&n); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
h.Nodes = []string{}
|
||||
}
|
||||
|
||||
for i := range nets {
|
||||
// create a node for each non zero network remaining
|
||||
if len(nets[i]) > 0 {
|
||||
// TODO create a node with given hostid
|
||||
logger.Log(0, "I will create a node here")
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue