1
0
forked from x/ContextOS

mac mod ssh.send

This commit is contained in:
shaoying 2018-05-08 08:46:05 +08:00
parent 4456c45258
commit 1ad0af36cb
3 changed files with 71 additions and 65 deletions

View File

@ -217,7 +217,7 @@ func init() {
"debug": 0, "debug": 0,
} }
log.slient = map[string]bool{ log.slient = map[string]bool{
"lock": true, // "lock": true,
} }
log.module = map[string]map[string]bool{ log.module = map[string]map[string]bool{
"log": {"cmd": true}, "log": {"cmd": true},

View File

@ -482,13 +482,14 @@ func (nfs *NFS) Start(m *ctx.Message, arg ...string) bool { // {{{
func() { func() {
cmd := msg cmd := msg
nsend := cmd.Option("nsend")
cmd.Call(func(sub *ctx.Message) *ctx.Message { cmd.Call(func(sub *ctx.Message) *ctx.Message {
for _, v := range sub.Meta["result"] { for _, v := range sub.Meta["result"] {
_, e := fmt.Fprintf(nfs.Writer, "result: %s\n", url.QueryEscape(v)) _, e := fmt.Fprintf(nfs.Writer, "result: %s\n", url.QueryEscape(v))
sub.Assert(e) sub.Assert(e)
} }
sub.Append("nsend", sub.Option("nsend")) sub.Append("nsend", nsend)
for _, k := range sub.Meta["append"] { for _, k := range sub.Meta["append"] {
for _, v := range sub.Meta[k] { for _, v := range sub.Meta[k] {
_, e := fmt.Fprintf(nfs.Writer, "%s: %s\n", k, v) _, e := fmt.Fprintf(nfs.Writer, "%s: %s\n", k, v)

View File

@ -20,7 +20,7 @@ type SSH struct {
func (ssh *SSH) Spawn(m *ctx.Message, c *ctx.Context, arg ...string) ctx.Server { // {{{ func (ssh *SSH) Spawn(m *ctx.Message, c *ctx.Context, arg ...string) ctx.Server { // {{{
c.Caches = map[string]*ctx.Cache{} c.Caches = map[string]*ctx.Cache{}
c.Configs = map[string]*ctx.Config{ c.Configs = map[string]*ctx.Config{
"domain": &ctx.Config{Name: "domain", Value: "", Help: "主机数量"}, "domains": &ctx.Config{Name: "domains", Value: "", Help: "主机数量"},
} }
s := new(SSH) s := new(SSH)
@ -87,14 +87,14 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心",
"domain": &ctx.Cache{Name: "domain", Value: "com", Help: "主机数量"}, "domain": &ctx.Cache{Name: "domain", Value: "com", Help: "主机数量"},
}, },
Configs: map[string]*ctx.Config{ Configs: map[string]*ctx.Config{
"domain": &ctx.Config{Name: "domain", Value: "com", Help: "主机数量"}, "domain": &ctx.Config{Name: "domain", Value: "com", Help: "主机数量"},
"domain.json": &ctx.Config{Name: "domain.json", Value: "var/domain.json", Help: "主机数量"},
"domain.png": &ctx.Config{Name: "domain.png", Value: "var/domain.png", Help: "主机数量"},
"route.json": &ctx.Config{Name: "route.json", Value: "var/route.json", Help: "主机数量"}, "type": &ctx.Config{Name: "type", Value: "terminal", Help: "主机数量"},
"route.png": &ctx.Config{Name: "route.png", Value: "var/route.png", Help: "主机数量"}, "kind": &ctx.Config{Name: "kind", Value: "terminal", Help: "主机数量"},
"type": &ctx.Config{Name: "type", Value: "terminal", Help: "主机数量"}, "name": &ctx.Config{Name: "name", Value: "vps", Help: "主机数量"},
"kind": &ctx.Config{Name: "kind", Value: "terminal", Help: "主机数量"}, "mark": &ctx.Config{Name: "mark", Value: "com", Help: "主机数量"},
"name": &ctx.Config{Name: "name", Value: "vps", Help: "主机数量"},
"mark": &ctx.Config{Name: "mark", Value: "com", Help: "主机数量"},
}, },
Commands: map[string]*ctx.Command{ Commands: map[string]*ctx.Command{
"listen": &ctx.Command{Name: "listen address protocol", Help: "监听连接", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) { "listen": &ctx.Command{Name: "listen address protocol", Help: "监听连接", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
@ -103,7 +103,6 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心",
sub := file.Spawn(m.Target()) sub := file.Spawn(m.Target())
sub.Start(fmt.Sprintf("host%d", Pulse.Capi("nhost", 1)), "远程主机") sub.Start(fmt.Sprintf("host%d", Pulse.Capi("nhost", 1)), "远程主机")
m.Sessions["ssh"] = sub m.Sessions["ssh"] = sub
// sub.Sesss("nfs").Cmd("send", "route", sub.Target().Name, m.Cap("route"))
return sub return sub
}, m.Meta["detail"]) }, m.Meta["detail"])
} }
@ -123,54 +122,23 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心",
} }
// }}} // }}}
}}, }},
"route": &ctx.Command{Name: "route", Help: "远程执行", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) { "send": &ctx.Command{Name: "send [domain str] cmd arg...", Help: "远程执行",
m.Conf("route", arg[0]) // {{{ Formats: map[string]int{"domain": 1},
m.Cap("route", arg[1]+"."+arg[0])
info := map[string]string{"route": m.Cap("route")}
msg := m.Sesss("nfs")
msg.Put("option", "data", info)
msg.Cmd("json", m.Conf("route.json"))
png := m.Sesss("nfs")
png.Cmd("genqr", m.Conf("route.png"), msg.Result(0))
m.Back(m)
// }}}
}},
"who": &ctx.Command{Name: "who", Help: "远程执行", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
aaa := m.Sesss("aaa")
if aaa != nil {
m.Echo(aaa.Cap("group"))
}
}},
"pwd": &ctx.Command{Name: "pwd", Help: "远程执行", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
switch len(arg) {
case 0:
m.Echo(m.Cap("domain"))
case 1:
if m.Options("nsend") {
m.Conf("domain", arg[0])
m.Echo(m.Cap("domain"))
m.Echo(".")
m.Echo(m.Conf("domain"))
} else {
m.Spawn(m.Target()).CallBack(m.Options("stdio"), func(msg *ctx.Message) *ctx.Message {
m.Conf("domain", msg.Result(2))
m.Echo(m.Cap("domain", strings.Join(msg.Meta["result"], "")))
m.Back(msg)
return nil
}, "send", "pwd", arg[0])
}
}
}},
"send": &ctx.Command{Name: "send [route domain] cmd arg...", Help: "远程执行",
Formats: map[string]int{"route": 1},
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) { // {{{
target := strings.Split(m.Option("route"), ".") target := strings.Split(m.Option("domain"), ".")
if len(target) == 1 && len(target[0]) == 0 { name, rest := target[0], target[1:]
if name == m.Conf("domain") {
if len(target) > 1 {
name = target[1]
rest = target[2:]
} else {
name = ""
}
}
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)
@ -186,10 +154,10 @@ 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.Target().Name == target[0] { if ssh, ok := m.Target().Server.(*SSH); ok && m.Conf("domains") == name {
msg := m.Spawn(ssh.nfs) msg := m.Spawn(ssh.nfs)
msg.Option("route", strings.Join(target[1:], ".")) msg.Option("domain", strings.Join(rest, "."))
msg.Call(func(host *ctx.Message) *ctx.Message { msg.CallBack(m.Options("stdio"), func(host *ctx.Message) *ctx.Message {
return m.Copy(host, "result").Copy(host, "append") return m.Copy(host, "result").Copy(host, "append")
}, "send", "send", arg) }, "send", "send", arg)
@ -198,16 +166,53 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心",
return miss return miss
}) })
if ssh, ok := c.Server.(*SSH); m.Assert(ok) && ssh.nfs != nil { if miss {
msg := m.Spawn(ssh.nfs) if ssh, ok := c.Server.(*SSH); m.Assert(ok) && ssh.nfs != nil {
msg.Option("route", m.Option("route")) msg := m.Spawn(ssh.nfs)
msg.Call(func(host *ctx.Message) *ctx.Message { msg.Option("domain", m.Option("domain"))
return m.Copy(host, "result").Copy(host, "append") msg.CallBack(m.Options("stdio"), func(host *ctx.Message) *ctx.Message {
}, "send", "send", arg) return m.Copy(host, "result").Copy(host, "append")
}, "send", "send", arg)
}
} }
} }
// }}} // }}}
}}, }},
"pwd": &ctx.Command{Name: "pwd", Help: "远程执行", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
switch len(arg) { // {{{
case 0:
m.Echo(m.Cap("domain"))
case 1:
if m.Options("nsend") {
m.Conf("domains", arg[0])
m.Echo(m.Cap("domain"))
m.Echo(".")
m.Echo(m.Conf("domains"))
} else {
m.Spawn(m.Target()).CallBack(m.Options("stdio"), func(msg *ctx.Message) *ctx.Message {
m.Conf("domain", msg.Result(2))
m.Echo(m.Cap("domain", strings.Join(msg.Meta["result"], "")))
m.Back(msg)
nfs := m.Sesss("nfs")
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
}, "send", "pwd", arg[0])
}
}
// }}}
}},
"who": &ctx.Command{Name: "who", Help: "远程执行", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
aaa := m.Sesss("aaa")
if aaa != nil {
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", Help: "远程执行", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
m.Append("share", m.Cap("share")) // {{{ m.Append("share", m.Cap("share")) // {{{
m.Append("level", m.Cap("level")) m.Append("level", m.Cap("level"))