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,
}
log.slient = map[string]bool{
"lock": true,
// "lock": true,
}
log.module = map[string]map[string]bool{
"log": {"cmd": true},

View File

@ -482,13 +482,14 @@ func (nfs *NFS) Start(m *ctx.Message, arg ...string) bool { // {{{
func() {
cmd := msg
nsend := cmd.Option("nsend")
cmd.Call(func(sub *ctx.Message) *ctx.Message {
for _, v := range sub.Meta["result"] {
_, e := fmt.Fprintf(nfs.Writer, "result: %s\n", url.QueryEscape(v))
sub.Assert(e)
}
sub.Append("nsend", sub.Option("nsend"))
sub.Append("nsend", nsend)
for _, k := range sub.Meta["append"] {
for _, v := range sub.Meta[k] {
_, 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 { // {{{
c.Caches = map[string]*ctx.Cache{}
c.Configs = map[string]*ctx.Config{
"domain": &ctx.Config{Name: "domain", Value: "", Help: "主机数量"},
"domains": &ctx.Config{Name: "domains", Value: "", Help: "主机数量"},
}
s := new(SSH)
@ -88,9 +88,9 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心",
},
Configs: map[string]*ctx.Config{
"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: "主机数量"},
"route.png": &ctx.Config{Name: "route.png", Value: "var/route.png", Help: "主机数量"},
"type": &ctx.Config{Name: "type", Value: "terminal", Help: "主机数量"},
"kind": &ctx.Config{Name: "kind", Value: "terminal", Help: "主机数量"},
"name": &ctx.Config{Name: "name", Value: "vps", Help: "主机数量"},
@ -103,7 +103,6 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心",
sub := file.Spawn(m.Target())
sub.Start(fmt.Sprintf("host%d", Pulse.Capi("nhost", 1)), "远程主机")
m.Sessions["ssh"] = sub
// sub.Sesss("nfs").Cmd("send", "route", sub.Target().Name, m.Cap("route"))
return sub
}, 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) {
m.Conf("route", arg[0]) // {{{
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},
"send": &ctx.Command{Name: "send [domain str] cmd arg...", Help: "远程执行",
Formats: map[string]int{"domain": 1},
Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
if ssh, ok := m.Target().Server.(*SSH); m.Assert(ok) { // {{{
target := strings.Split(m.Option("route"), ".")
if len(target) == 1 && len(target[0]) == 0 {
target := strings.Split(m.Option("domain"), ".")
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") {
msg := m.Spawn(m.Target())
msg.Cmd(arg)
@ -186,10 +154,10 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心",
miss := true
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.Option("route", strings.Join(target[1:], "."))
msg.Call(func(host *ctx.Message) *ctx.Message {
msg.Option("domain", strings.Join(rest, "."))
msg.CallBack(m.Options("stdio"), func(host *ctx.Message) *ctx.Message {
return m.Copy(host, "result").Copy(host, "append")
}, "send", "send", arg)
@ -198,16 +166,53 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心",
return miss
})
if miss {
if ssh, ok := c.Server.(*SSH); m.Assert(ok) && ssh.nfs != nil {
msg := m.Spawn(ssh.nfs)
msg.Option("route", m.Option("route"))
msg.Call(func(host *ctx.Message) *ctx.Message {
msg.Option("domain", m.Option("domain"))
msg.CallBack(m.Options("stdio"), func(host *ctx.Message) *ctx.Message {
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) {
m.Append("share", m.Cap("share")) // {{{
m.Append("level", m.Cap("level"))