1
0
forked from x/ContextOS

add ssh.save

This commit is contained in:
shylinux 2018-05-12 23:18:53 +08:00
parent 1ad0af36cb
commit ec3f245241
3 changed files with 31 additions and 19 deletions

View File

@ -935,10 +935,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)

View File

@ -105,6 +105,7 @@ 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")
} }
// }}} // }}}
}}, }},
@ -127,6 +128,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 +147,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 +162,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 +175,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"))
@ -194,19 +203,20 @@ 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 {
@ -217,7 +227,7 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心",
m.Append("share", m.Cap("share")) // {{{ 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.Conf("name"))
m.Append("mark", m.Conf("mark")) m.Append("mark", m.Conf("mark"))

View File

@ -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"] {