Merge branch 'V5.0' of https://github.com/goodrain/rainbond into V5.0

This commit is contained in:
GLYASAI 2018-12-25 11:26:35 +08:00
commit efb808ab9e
5 changed files with 48 additions and 65 deletions

View File

@ -548,7 +548,11 @@ func NewCmdNode() cli.Command {
node.ID = c.String("id") node.ID = c.String("id")
err := clients.RegionClient.Nodes().Add(&node) err := clients.RegionClient.Nodes().Add(&node)
handleErr(err) handleErr(err)
fmt.Println("success add node") if node.AutoInstall {
fmt.Printf("success add node, and it is installing,install log file /grdata/downloads/log/%s.log\n", node.HostName)
} else {
fmt.Println("success add node, you install it by running: grctl node install <nodeID>")
}
return nil return nil
}, },
}, },
@ -563,9 +567,11 @@ func NewCmdNode() cli.Command {
if nodeID == "" { if nodeID == "" {
showError("node id can not be empty") showError("node id can not be empty")
} }
err := clients.RegionClient.Nodes().Install(nodeID) node, err := clients.RegionClient.Nodes().Get(nodeID)
handleErr(err) handleErr(err)
fmt.Println("start install node") err = clients.RegionClient.Nodes().Install(nodeID)
handleErr(err)
fmt.Printf("start install nodeinstall log file /grdata/downloads/log/%s.log\n", node.HostName)
return nil return nil
}, },
}, },

View File

@ -78,7 +78,6 @@ func AddNode(w http.ResponseWriter, r *http.Request) {
return return
} }
} }
httputil.ReturnSuccess(r, w, rnode) httputil.ReturnSuccess(r, w, rnode)
} }

View File

@ -36,27 +36,6 @@ import (
"github.com/twinj/uuid" "github.com/twinj/uuid"
) )
const (
//Running node running status
Running = "running"
//Offline node offline status
Offline = "offline"
//Unknown node unknown status
Unknown = "unknown"
//Error node error status
Error = "error"
//Init node init status
Init = "init"
//InstallSuccess node install success status
InstallSuccess = "install_success"
//InstallFailed node install failure status
InstallFailed = "install_failed"
//Installing node installing status
Installing = "installing"
//NotInstalled node not install status
NotInstalled = "not_installed"
)
//NodeService node service //NodeService node service
type NodeService struct { type NodeService struct {
c *option.Conf c *option.Conf
@ -105,20 +84,14 @@ func (n *NodeService) AddNode(node *client.APIHostNode) (*client.HostNode, *util
rbnode := node.Clone() rbnode := node.Clone()
rbnode.CreateTime = time.Now() rbnode.CreateTime = time.Now()
n.nodecluster.UpdateNode(rbnode) n.nodecluster.UpdateNode(rbnode)
if _, err := rbnode.Update(); err != nil {
return nil, utils.CreateAPIHandleErrorFromDBError("save node", err)
}
return rbnode, nil return rbnode, nil
} }
//InstallNode install node //InstallNode install node
func (n *NodeService) InstallNode(node *client.HostNode) *utils.APIHandleError { func (n *NodeService) InstallNode(node *client.HostNode) *utils.APIHandleError {
node.Status = Installing node.Status = client.Installing
node.NodeStatus.Status = Installing node.NodeStatus.Status = client.Installing
n.nodecluster.UpdateNode(node) n.nodecluster.UpdateNode(node)
if _, err := node.Update(); err != nil {
return utils.CreateAPIHandleErrorFromDBError("save node", err)
}
go n.AsynchronousInstall(node) go n.AsynchronousInstall(node)
return nil return nil
} }
@ -130,35 +103,28 @@ func (n *NodeService) AsynchronousInstall(node *client.HostNode) {
linkModel = "key" linkModel = "key"
} }
// start add node script // start add node script
logrus.Info("Begin add node, please don't exit") logrus.Infof("Begin install node %s", node.ID)
line := fmt.Sprintf("cd /opt/rainbond/rainbond-ansible/scripts; ./%s.sh %s %s %s %s %s %s", node.Role[0], node.HostName, line := fmt.Sprintf("./node.sh %s %s %s %s %s %s %s", node.Role[0], node.HostName,
node.InternalIP, linkModel, node.RootPass, node.KeyPath, node.ID) node.InternalIP, linkModel, node.RootPass, node.KeyPath, node.ID)
fileName := node.HostName + ".log" fileName := node.HostName + ".log"
cmd := exec.Command("bash", "-c", line) cmd := exec.Command("bash", "-c", line)
f, _ := os.OpenFile("/grdata/downloads/log/"+fileName, os.O_WRONLY|os.O_CREATE|os.O_SYNC, 0755) f, _ := os.OpenFile("/grdata/downloads/log/"+fileName, os.O_WRONLY|os.O_CREATE|os.O_SYNC, 0755)
cmd.Stdout = f cmd.Stdout = f
cmd.Dir = "/opt/rainbond/rainbond-ansible/scripts"
cmd.Stderr = f cmd.Stderr = f
err := cmd.Run() err := cmd.Run()
if err != nil { if err != nil {
logrus.Errorf("Error executing shell script,View log file/grdata/downloads/log/" + fileName) logrus.Errorf("Error executing shell script,View log file/grdata/downloads/log/" + fileName)
node.Status = InstallFailed node.Status = client.InstallFailed
node.NodeStatus.Status = InstallFailed node.NodeStatus.Status = client.InstallFailed
n.nodecluster.UpdateNode(node) n.nodecluster.UpdateNode(node)
if _, err := node.Update(); err != nil {
logrus.Errorf(err.Error())
}
return return
} }
logrus.Info("Add node successful") logrus.Info("Add node successful")
logrus.Info("check cluster status: grctl node list") logrus.Info("check cluster status: grctl node list")
node.Status = InstallSuccess node.Status = client.InstallSuccess
node.NodeStatus.Status = InstallSuccess node.NodeStatus.Status = client.InstallSuccess
n.nodecluster.UpdateNode(node) n.nodecluster.UpdateNode(node)
if _, err := node.Update(); err != nil {
logrus.Errorf(err.Error())
}
} }
//DeleteNode delete node //DeleteNode delete node
@ -280,8 +246,8 @@ func (n *NodeService) DownNode(nodeID string) (*client.HostNode, *utils.APIHandl
return nil, utils.CreateAPIHandleError(500, fmt.Errorf("k8s node down error,%s", err.Error())) return nil, utils.CreateAPIHandleError(500, fmt.Errorf("k8s node down error,%s", err.Error()))
} }
} }
hostNode.Status = Offline hostNode.Status = client.Offline
hostNode.NodeStatus.Status = Offline hostNode.NodeStatus.Status = client.Offline
n.nodecluster.UpdateNode(hostNode) n.nodecluster.UpdateNode(hostNode)
return hostNode, nil return hostNode, nil
} }
@ -303,8 +269,8 @@ func (n *NodeService) UpNode(nodeID string) (*client.HostNode, *utils.APIHandleE
hostNode.UpdateK8sNodeStatus(*node) hostNode.UpdateK8sNodeStatus(*node)
} }
} }
hostNode.Status = Running hostNode.Status = client.Running
hostNode.NodeStatus.Status = Running hostNode.NodeStatus.Status = client.Running
n.nodecluster.UpdateNode(hostNode) n.nodecluster.UpdateNode(hostNode)
return hostNode, nil return hostNode, nil
} }

View File

@ -45,18 +45,6 @@ import (
"github.com/goodrain/rainbond/util" "github.com/goodrain/rainbond/util"
) )
const (
Running = "running"
Offline = "offline"
Unknown = "unknown"
Error = "error"
Init = "init"
InstallSuccess = "install_success"
InstallFailed = "install_failed"
Installing = "installing"
NotInstalled = "not_installed"
)
//Cluster node controller //Cluster node controller
type Cluster struct { type Cluster struct {
ctx context.Context ctx context.Context
@ -168,9 +156,12 @@ func (n *Cluster) GetNode(id string) *client.HostNode {
//handleNodeStatus Master integrates node status and kube node status //handleNodeStatus Master integrates node status and kube node status
func (n *Cluster) handleNodeStatus(v *client.HostNode) { func (n *Cluster) handleNodeStatus(v *client.HostNode) {
if v.Status == client.NotInstalled || v.Status == client.Installing || v.Status == client.InstallFailed {
return
}
if time.Now().Sub(v.NodeStatus.NodeUpdateTime) > time.Minute*1 { if time.Now().Sub(v.NodeStatus.NodeUpdateTime) > time.Minute*1 {
v.Status = Unknown v.Status = client.Unknown
v.NodeStatus.Status = Unknown v.NodeStatus.Status = client.Unknown
r := client.NodeCondition{ r := client.NodeCondition{
Type: client.NodeUp, Type: client.NodeUp,
Status: client.ConditionFalse, Status: client.ConditionFalse,

View File

@ -179,6 +179,27 @@ type NodeSystemInfo struct {
NumCPU int64 `json:"cpu_num"` NumCPU int64 `json:"cpu_num"`
} }
const (
//Running node running status
Running = "running"
//Offline node offline status
Offline = "offline"
//Unknown node unknown status
Unknown = "unknown"
//Error node error status
Error = "error"
//Init node init status
Init = "init"
//InstallSuccess node install success status
InstallSuccess = "install_success"
//InstallFailed node install failure status
InstallFailed = "install_failed"
//Installing node installing status
Installing = "installing"
//NotInstalled node not install status
NotInstalled = "not_installed"
)
//Decode decode node info //Decode decode node info
func (n *HostNode) Decode(data []byte) error { func (n *HostNode) Decode(data []byte) error {
if err := ffjson.Unmarshal(data, n); err != nil { if err := ffjson.Unmarshal(data, n); err != nil {