Rainbond/grctl/cmd/domain.go

162 lines
3.9 KiB
Go
Raw Normal View History

2018-03-14 14:12:26 +08:00
// Copyright (C) 2014-2018 Goodrain Co., Ltd.
2017-12-11 14:29:36 +08:00
// RAINBOND, Application Management Platform
2018-03-14 14:33:31 +08:00
2017-12-11 14:29:36 +08:00
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version. For any non-GPL usage of Rainbond,
// one or multiple Commercial Licenses authorized by Goodrain Co., Ltd.
// must be obtained first.
2018-03-14 14:33:31 +08:00
2017-12-11 14:29:36 +08:00
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
2018-03-14 14:33:31 +08:00
2017-12-11 14:29:36 +08:00
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
package cmd
2017-12-11 14:29:36 +08:00
import (
"bytes"
"fmt"
2017-12-11 14:29:36 +08:00
"os/exec"
2017-12-15 16:49:24 +08:00
"strings"
"github.com/Sirupsen/logrus"
"github.com/goodrain/rainbond/grctl/clients"
"github.com/goodrain/rainbond/node/api/model"
"github.com/urfave/cli"
2017-12-11 14:29:36 +08:00
)
func NewCmdDomain() cli.Command {
c := cli.Command{
2017-12-11 14:29:36 +08:00
Name: "domain",
Flags: []cli.Flag{
cli.StringFlag{
Name: "ip",
Usage: "ip address",
},
cli.StringFlag{
Name: "domain",
Usage: "domain",
},
},
Usage: "",
Action: func(c *cli.Context) error {
ip := c.String("ip")
if len(ip) == 0 {
2017-12-11 14:29:36 +08:00
fmt.Println("ip must not null")
return nil
}
domain := c.String("domain")
cmd := exec.Command("bash", "/opt/rainbond/bin/.domain.sh", ip, domain)
outbuf := bytes.NewBuffer(nil)
cmd.Stdout = outbuf
2017-12-11 14:29:36 +08:00
cmd.Run()
out := outbuf.String()
2017-12-11 14:29:36 +08:00
fmt.Println(out)
return nil
},
}
return c
}
2017-12-12 12:47:33 +08:00
func NewCmdCheckTask() cli.Command {
c := cli.Command{
2017-12-12 12:47:33 +08:00
Name: "checkTask",
Flags: []cli.Flag{
cli.StringFlag{
Name: "uuid",
Usage: "uuid",
},
},
Usage: "",
Action: func(c *cli.Context) error {
uuid := c.String("uuid")
if len(uuid) == 0 {
2017-12-12 12:47:33 +08:00
fmt.Println("uuid must not null")
return nil
}
tasks, err := clients.RegionClient.Tasks().List()
2017-12-12 12:47:33 +08:00
if err != nil {
logrus.Errorf("error get task list,details %s", err.Error())
2017-12-12 12:47:33 +08:00
return err
}
2017-12-15 16:49:24 +08:00
var result []*ExecedTask
for _, v := range tasks {
taskStatus, ok := v.Status[uuid]
if ok {
status := strings.ToLower(taskStatus.Status)
if status == "complete" || status == "start" {
var taskentity = &ExecedTask{}
taskentity.ID = v.ID
taskentity.Status = taskStatus.Status
taskentity.Depends = []string{}
dealDepend(taskentity, v)
dealNext(taskentity, tasks)
result = append(result, taskentity)
2017-12-15 16:49:24 +08:00
continue
}
2017-12-11 14:29:36 +08:00
} else {
_, scheduled := v.Scheduler.Status[uuid]
2017-12-15 16:49:24 +08:00
if scheduled {
var taskentity = &ExecedTask{}
taskentity.ID = v.ID
taskentity.Depends = []string{}
dealDepend(taskentity, v)
dealNext(taskentity, tasks)
allDepDone := true
2017-12-15 16:49:24 +08:00
for _, dep := range taskentity.Depends {
task, _ := clients.RegionClient.Tasks().Get(dep)
2017-12-15 16:49:24 +08:00
_, depOK := task.Status[uuid]
2017-12-15 16:49:24 +08:00
if !depOK {
allDepDone = false
2017-12-15 16:49:24 +08:00
break
}
}
if allDepDone {
taskentity.Status = "start"
result = append(result, taskentity)
2017-12-15 16:49:24 +08:00
}
}
2017-12-12 12:47:33 +08:00
}
}
for _, v := range result {
fmt.Printf("task %s is %s,depends is %v\n", v.ID, v.Status, v.Depends)
2017-12-15 16:49:24 +08:00
}
2017-12-12 12:47:33 +08:00
return nil
},
}
return c
}
func dealDepend(result *ExecedTask, task *model.Task) {
2017-12-15 16:49:24 +08:00
if task.Temp.Depends != nil {
for _, v := range task.Temp.Depends {
result.Depends = append(result.Depends, v.DependTaskID)
2017-12-15 16:49:24 +08:00
}
}
}
func dealNext(task *ExecedTask, tasks []*model.Task) {
for _, v := range tasks {
2017-12-15 16:49:24 +08:00
if v.Temp.Depends != nil {
for _, dep := range v.Temp.Depends {
2017-12-15 16:49:24 +08:00
if dep.DependTaskID == task.ID {
task.Next = append(task.Next, v.ID)
2017-12-15 16:49:24 +08:00
}
}
}
}
}
2017-12-15 16:49:24 +08:00
type ExecedTask struct {
ID string
Status string
2017-12-15 16:49:24 +08:00
Depends []string
Next []string
2017-12-15 16:49:24 +08:00
}