forked from x/ContextOS
Merge branch 'master' of github.com:shylinux/context
This commit is contained in:
commit
0f871899af
@ -1,3 +1,5 @@
|
|||||||
source etc/local.shy
|
source etc/local.shy
|
||||||
login root root
|
login root root
|
||||||
|
~ssh
|
||||||
|
dial "shylinux.com:9090"
|
||||||
|
|
||||||
|
@ -941,10 +941,11 @@ func (m *Message) CallBack(sync bool, cb func(msg *Message) (sub *Message), arg
|
|||||||
wait := make(chan bool)
|
wait := make(chan bool)
|
||||||
|
|
||||||
go m.Call(func(sub *Message) *Message {
|
go m.Call(func(sub *Message) *Message {
|
||||||
|
msg := cb(sub)
|
||||||
m.Log("lock", nil, "before done %v", arg)
|
m.Log("lock", nil, "before done %v", arg)
|
||||||
wait <- true
|
wait <- true
|
||||||
m.Log("lock", nil, "after done %v", arg)
|
m.Log("lock", nil, "after done %v", arg)
|
||||||
return cb(sub)
|
return msg
|
||||||
}, arg...)
|
}, arg...)
|
||||||
|
|
||||||
m.Log("lock", nil, "before wait %v", arg)
|
m.Log("lock", nil, "before wait %v", arg)
|
||||||
|
@ -5,7 +5,6 @@ import ( // {{{
|
|||||||
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// }}}
|
// }}}
|
||||||
@ -105,17 +104,17 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心",
|
|||||||
m.Sessions["ssh"] = sub
|
m.Sessions["ssh"] = sub
|
||||||
return sub
|
return sub
|
||||||
}, m.Meta["detail"])
|
}, m.Meta["detail"])
|
||||||
|
m.Spawn(m.Target()).Cmd("save")
|
||||||
}
|
}
|
||||||
// }}}
|
// }}}
|
||||||
}},
|
}},
|
||||||
"dial": &ctx.Command{Name: "dial address protocol", Help: "建立连接", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
|
"dial": &ctx.Command{Name: "dial address protocol", Help: "建立连接", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
|
||||||
if _, ok := m.Target().Server.(*SSH); m.Assert(ok) { // {{{
|
if _, ok := m.Target().Server.(*SSH); m.Assert(ok) { // {{{
|
||||||
m.Find("nfs").Call(func(file *ctx.Message) *ctx.Message {
|
m.Find("nfs").CallBack(true, func(file *ctx.Message) *ctx.Message {
|
||||||
sub := file.Spawn(m.Target())
|
sub := file.Spawn(m.Target())
|
||||||
sub.Target().Start(sub)
|
sub.Target().Start(sub)
|
||||||
m.Sessions["ssh"] = sub
|
m.Sessions["ssh"] = sub
|
||||||
|
|
||||||
time.Sleep(time.Second)
|
|
||||||
sub.Spawn(sub.Target()).Cmd("pwd", m.Conf("domain"))
|
sub.Spawn(sub.Target()).Cmd("pwd", m.Conf("domain"))
|
||||||
return sub
|
return sub
|
||||||
}, m.Meta["detail"])
|
}, m.Meta["detail"])
|
||||||
@ -127,6 +126,14 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心",
|
|||||||
Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
|
Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
|
||||||
if ssh, ok := m.Target().Server.(*SSH); m.Assert(ok) { // {{{
|
if ssh, ok := m.Target().Server.(*SSH); m.Assert(ok) { // {{{
|
||||||
|
|
||||||
|
if m.Option("domain") == m.Cap("domain") { //本地命令
|
||||||
|
msg := m.Spawn(m.Target())
|
||||||
|
msg.Cmd(arg)
|
||||||
|
m.Copy(msg, "result").Copy(msg, "append")
|
||||||
|
m.Back(m)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
target := strings.Split(m.Option("domain"), ".")
|
target := strings.Split(m.Option("domain"), ".")
|
||||||
name, rest := target[0], target[1:]
|
name, rest := target[0], target[1:]
|
||||||
if name == m.Conf("domain") {
|
if name == m.Conf("domain") {
|
||||||
@ -138,14 +145,14 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心",
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(rest) == 0 && len(name) == 0 {
|
if len(rest) == 0 && len(name) == 0 { //点对点通信
|
||||||
if m.Options("nsend") {
|
if m.Options("nsend") { //接收命令
|
||||||
msg := m.Spawn(m.Target())
|
msg := m.Spawn(m.Target())
|
||||||
msg.Cmd(arg)
|
msg.Cmd(arg)
|
||||||
m.Back(msg)
|
m.Back(msg)
|
||||||
} else {
|
} else { //发送命令
|
||||||
ssh.Message.Sesss("nfs").CallBack(m.Options("stdio"), func(host *ctx.Message) *ctx.Message {
|
ssh.Message.Sesss("nfs").CallBack(m.Options("stdio"), func(host *ctx.Message) *ctx.Message {
|
||||||
m.Back(m.Copy(host, "result").Copy(host, "option"))
|
m.Back(m.Copy(host, "result").Copy(host, "append"))
|
||||||
return nil
|
return nil
|
||||||
}, "send", "send", arg)
|
}, "send", "send", arg)
|
||||||
}
|
}
|
||||||
@ -153,7 +160,7 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心",
|
|||||||
}
|
}
|
||||||
|
|
||||||
miss := true
|
miss := true
|
||||||
m.Travel(c, func(m *ctx.Message) bool {
|
m.Travel(c, func(m *ctx.Message) bool { //向下搜索
|
||||||
if ssh, ok := m.Target().Server.(*SSH); ok && m.Conf("domains") == name {
|
if ssh, ok := m.Target().Server.(*SSH); ok && m.Conf("domains") == name {
|
||||||
msg := m.Spawn(ssh.nfs)
|
msg := m.Spawn(ssh.nfs)
|
||||||
msg.Option("domain", strings.Join(rest, "."))
|
msg.Option("domain", strings.Join(rest, "."))
|
||||||
@ -166,7 +173,7 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心",
|
|||||||
return miss
|
return miss
|
||||||
})
|
})
|
||||||
|
|
||||||
if miss {
|
if miss { //向上搜索
|
||||||
if ssh, ok := c.Server.(*SSH); m.Assert(ok) && ssh.nfs != nil {
|
if ssh, ok := c.Server.(*SSH); m.Assert(ok) && ssh.nfs != nil {
|
||||||
msg := m.Spawn(ssh.nfs)
|
msg := m.Spawn(ssh.nfs)
|
||||||
msg.Option("domain", m.Option("domain"))
|
msg.Option("domain", m.Option("domain"))
|
||||||
@ -184,7 +191,17 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心",
|
|||||||
m.Echo(m.Cap("domain"))
|
m.Echo(m.Cap("domain"))
|
||||||
case 1:
|
case 1:
|
||||||
if m.Options("nsend") {
|
if m.Options("nsend") {
|
||||||
m.Conf("domains", arg[0])
|
domain := arg[0]
|
||||||
|
|
||||||
|
m.Travel(c, func(m *ctx.Message) bool {
|
||||||
|
if m.Conf("domains") == domain {
|
||||||
|
domain = domain + m.Cap("nhost")
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
m.Conf("domains", domain)
|
||||||
|
|
||||||
m.Echo(m.Cap("domain"))
|
m.Echo(m.Cap("domain"))
|
||||||
m.Echo(".")
|
m.Echo(".")
|
||||||
m.Echo(m.Conf("domains"))
|
m.Echo(m.Conf("domains"))
|
||||||
@ -194,36 +211,95 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心",
|
|||||||
m.Echo(m.Cap("domain", strings.Join(msg.Meta["result"], "")))
|
m.Echo(m.Cap("domain", strings.Join(msg.Meta["result"], "")))
|
||||||
m.Back(msg)
|
m.Back(msg)
|
||||||
|
|
||||||
nfs := m.Sesss("nfs")
|
m.Spawn(m.Target()).Cmd("save")
|
||||||
nfs.Put("option", "data", map[string]string{"domain": m.Cap("domain")})
|
|
||||||
nfs.Cmd("json", m.Conf("domain.json"))
|
|
||||||
|
|
||||||
png := m.Sesss("nfs")
|
|
||||||
png.Cmd("genqr", m.Conf("domain.png"), m.Cap("domain"))
|
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}, "send", "pwd", arg[0])
|
}, "send", "pwd", arg[0])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// }}}
|
// }}}
|
||||||
}},
|
}},
|
||||||
|
"save": &ctx.Command{Name: "save", Help: "远程执行", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
|
||||||
|
json := m.Sesss("nfs") // {{{
|
||||||
|
json.Put("option", "data", map[string]string{"domain": m.Cap("domain")})
|
||||||
|
json.Cmd("json", m.Conf("domain.json"))
|
||||||
|
m.Sesss("nfs").Cmd("genqr", m.Conf("domain.png"), json.Result(0))
|
||||||
|
// }}}
|
||||||
|
}},
|
||||||
"who": &ctx.Command{Name: "who", Help: "远程执行", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
|
"who": &ctx.Command{Name: "who", Help: "远程执行", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
|
||||||
aaa := m.Sesss("aaa")
|
aaa := m.Sesss("aaa") // {{{
|
||||||
if aaa != nil {
|
if aaa != nil {
|
||||||
m.Echo(aaa.Cap("group"))
|
m.Echo(aaa.Cap("group"))
|
||||||
}
|
}
|
||||||
|
// }}}
|
||||||
}},
|
}},
|
||||||
"good": &ctx.Command{Name: "good", Help: "远程执行", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
|
"good": &ctx.Command{Name: "good context|command|config|cache args", Help: "设备注册", Hand: func(m *ctx.Message, c *ctx.Context, cmd string, arg ...string) {
|
||||||
m.Append("share", m.Cap("share")) // {{{
|
if len(arg) == 0 { // {{{
|
||||||
|
m.Append("share", m.Cap("share"))
|
||||||
m.Append("level", m.Cap("level"))
|
m.Append("level", m.Cap("level"))
|
||||||
m.Append("type", m.Conf("type"))
|
m.Append("type", m.Conf("type"))
|
||||||
m.Append("value", m.Cap("route"))
|
m.Append("value", m.Cap("domain"))
|
||||||
m.Append("kind", m.Conf("kind"))
|
m.Append("kind", m.Conf("kind"))
|
||||||
m.Append("name", m.Conf("name"))
|
m.Append("name", m.Cap("domain"))
|
||||||
m.Append("mark", m.Conf("mark"))
|
m.Append("mark", m.Conf("mark"))
|
||||||
m.Append("count", m.Cap("count"))
|
m.Append("count", m.Cap("count"))
|
||||||
m.Back(m)
|
m.Back(m)
|
||||||
// }}}
|
return
|
||||||
|
}
|
||||||
|
cmds := m.Option("cmds")
|
||||||
|
|
||||||
|
if arg[0] == "context" {
|
||||||
|
if len(arg) > 1 {
|
||||||
|
cmds = arg[1]
|
||||||
|
}
|
||||||
|
|
||||||
|
m.Travel(ctx.Index, func(msg *ctx.Message) bool {
|
||||||
|
current := msg.Target()
|
||||||
|
if _, ok := current.Index[cmds]; ok {
|
||||||
|
|
||||||
|
} else if cmds != "" && cmds != "root" {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
m.Add("append", "name", current.Name)
|
||||||
|
m.Add("append", "help", current.Help)
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(arg) > 2 {
|
||||||
|
cmds = arg[2]
|
||||||
|
}
|
||||||
|
current := m.Sess(arg[1], arg[1], "search").Target()
|
||||||
|
if x, ok := current.Index[cmds]; ok {
|
||||||
|
current = x
|
||||||
|
} else if cmds != "" && cmds != "root" {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
switch arg[0] {
|
||||||
|
case "command":
|
||||||
|
|
||||||
|
for k, x := range current.Commands {
|
||||||
|
m.Add("append", "key", k)
|
||||||
|
m.Add("append", "name", x.Name)
|
||||||
|
m.Add("append", "help", x.Help)
|
||||||
|
}
|
||||||
|
case "config":
|
||||||
|
for k, x := range current.Configs {
|
||||||
|
m.Add("append", "key", k)
|
||||||
|
m.Add("append", "name", x.Name)
|
||||||
|
m.Add("append", "value", x.Value)
|
||||||
|
m.Add("append", "help", x.Help)
|
||||||
|
}
|
||||||
|
case "cache":
|
||||||
|
for k, x := range current.Caches {
|
||||||
|
m.Add("append", "key", k)
|
||||||
|
m.Add("append", "name", x.Name)
|
||||||
|
m.Add("append", "value", x.Value)
|
||||||
|
m.Add("append", "help", x.Help)
|
||||||
|
}
|
||||||
|
} // }}}
|
||||||
}},
|
}},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -117,11 +117,11 @@ func (web *WEB) generate(m *ctx.Message, uri string, arg ...string) string { //
|
|||||||
|
|
||||||
func (web *WEB) AppendJson(msg *ctx.Message) string { // {{{
|
func (web *WEB) AppendJson(msg *ctx.Message) string { // {{{
|
||||||
meta := map[string][]string{}
|
meta := map[string][]string{}
|
||||||
meta["result"] = msg.Meta["result"]
|
|
||||||
meta["append"] = msg.Meta["append"]
|
|
||||||
for _, v := range msg.Meta["append"] {
|
for _, v := range msg.Meta["append"] {
|
||||||
meta[v] = msg.Meta[v]
|
meta[v] = msg.Meta[v]
|
||||||
}
|
}
|
||||||
|
meta["result"] = msg.Meta["result"]
|
||||||
|
meta["append"] = msg.Meta["append"]
|
||||||
|
|
||||||
b, e := json.Marshal(meta)
|
b, e := json.Marshal(meta)
|
||||||
msg.Assert(e)
|
msg.Assert(e)
|
||||||
@ -160,8 +160,9 @@ func (web *WEB) Trans(m *ctx.Message, key string, hand func(*ctx.Message, *ctx.C
|
|||||||
msg.Log("cmd", nil, "%s [] %v", key, msg.Meta["option"])
|
msg.Log("cmd", nil, "%s [] %v", key, msg.Meta["option"])
|
||||||
|
|
||||||
msg.Put("option", "request", r).Put("option", "response", w)
|
msg.Put("option", "request", r).Put("option", "response", w)
|
||||||
if hand(msg, msg.Target(), key); len(msg.Meta["append"]) > 0 {
|
if hand(msg, msg.Target(), key); len(msg.Meta["append"]) > -1 {
|
||||||
msg.Set("result", web.AppendJson(msg))
|
w.Write([]byte(web.AppendJson(msg)))
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, v := range msg.Meta["result"] {
|
for _, v := range msg.Meta["result"] {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user