forked from x/ContextOS
vps add ssh.search 添加路径搜索
This commit is contained in:
parent
bdb86ead00
commit
24c0290691
@ -1423,6 +1423,10 @@ var Index = &Context{Name: "ctx", Help: "模块中心",
|
|||||||
m.Echo(" %s: %v\n", k, ms[i].Meta[k])
|
m.Echo(" %s: %v\n", k, ms[i].Meta[k])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ms[i].callback != nil {
|
||||||
|
m.Echo("callback: %d\n", ms[i].ncallback)
|
||||||
|
}
|
||||||
|
|
||||||
if len(ms[i].Meta["result"]) > 0 {
|
if len(ms[i].Meta["result"]) > 0 {
|
||||||
m.Echo("result: %v\n", ms[i].Meta["result"])
|
m.Echo("result: %v\n", ms[i].Meta["result"])
|
||||||
}
|
}
|
||||||
|
@ -95,6 +95,7 @@ func (nfs *NFS) Start(m *ctx.Message, arg ...string) bool { // {{{
|
|||||||
for {
|
for {
|
||||||
line, e := nfs.Reader.ReadString('\n')
|
line, e := nfs.Reader.ReadString('\n')
|
||||||
m.Assert(e)
|
m.Assert(e)
|
||||||
|
// m.Log("debug", nil, "recv(%d): %s", len(line), line)
|
||||||
|
|
||||||
if line = strings.TrimSpace(line); len(line) > 0 {
|
if line = strings.TrimSpace(line); len(line) > 0 {
|
||||||
ls := strings.SplitN(line, ":", 2)
|
ls := strings.SplitN(line, ":", 2)
|
||||||
@ -117,30 +118,36 @@ func (nfs *NFS) Start(m *ctx.Message, arg ...string) bool { // {{{
|
|||||||
if msg.Log("info", nil, "remote: %v", msg.Meta["option"]); msg.Has("detail") {
|
if msg.Log("info", nil, "remote: %v", msg.Meta["option"]); msg.Has("detail") {
|
||||||
msg.Log("info", nil, "%d exec: %v", m.Capi("nrecv", 1), msg.Meta["detail"])
|
msg.Log("info", nil, "%d exec: %v", m.Capi("nrecv", 1), msg.Meta["detail"])
|
||||||
|
|
||||||
msg.Cmd(msg.Meta["detail"])
|
func() {
|
||||||
target = msg.Target()
|
fuck := msg
|
||||||
m.Cap("target", target.Name)
|
fuck.Call(func(ok bool) (done bool, up bool) {
|
||||||
|
target = fuck.Target()
|
||||||
|
m.Cap("target", target.Name)
|
||||||
|
|
||||||
for _, v := range msg.Meta["result"] {
|
for _, v := range fuck.Meta["result"] {
|
||||||
fmt.Fprintf(nfs.Writer, "result: %s\n", url.QueryEscape(v))
|
fmt.Fprintf(nfs.Writer, "result: %s\n", url.QueryEscape(v))
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Fprintf(nfs.Writer, "nsend: %s\n", msg.Get("nrecv"))
|
fmt.Fprintf(nfs.Writer, "nsend: %s\n", fuck.Get("nrecv"))
|
||||||
for _, k := range msg.Meta["append"] {
|
for _, k := range fuck.Meta["append"] {
|
||||||
for _, v := range msg.Meta[k] {
|
for _, v := range fuck.Meta[k] {
|
||||||
fmt.Fprintf(nfs.Writer, "%s: %s\n", k, v)
|
fmt.Fprintf(nfs.Writer, "%s: %s\n", k, v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fmt.Fprintf(nfs.Writer, "\n")
|
fmt.Fprintf(nfs.Writer, "\n")
|
||||||
nfs.Writer.Flush()
|
|
||||||
|
|
||||||
if msg.Has("io") {
|
|
||||||
if f, ok := msg.Data["io"].(io.ReadCloser); ok {
|
|
||||||
io.Copy(nfs.Writer, f)
|
|
||||||
nfs.Writer.Flush()
|
nfs.Writer.Flush()
|
||||||
f.Close()
|
|
||||||
}
|
if fuck.Has("io") {
|
||||||
}
|
if f, ok := fuck.Data["io"].(io.ReadCloser); ok {
|
||||||
|
io.Copy(nfs.Writer, f)
|
||||||
|
nfs.Writer.Flush()
|
||||||
|
f.Close()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ok, ok
|
||||||
|
}, false).Cmd(fuck.Meta["detail"])
|
||||||
|
}()
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
msg.Log("info", nil, "%d echo: %v", nsend, msg.Meta["result"])
|
msg.Log("info", nil, "%d echo: %v", nsend, msg.Meta["result"])
|
||||||
|
|
||||||
|
@ -118,7 +118,7 @@ var Pulse *ctx.Message
|
|||||||
var Index = &ctx.Context{Name: "ssh", Help: "集群中心",
|
var Index = &ctx.Context{Name: "ssh", Help: "集群中心",
|
||||||
Caches: map[string]*ctx.Cache{
|
Caches: map[string]*ctx.Cache{
|
||||||
"nhost": &ctx.Cache{Name: "主机数量", Value: "0", Help: "主机数量"},
|
"nhost": &ctx.Cache{Name: "主机数量", Value: "0", Help: "主机数量"},
|
||||||
"route": &ctx.Cache{Name: "route", Value: "", Help: "主机数量"},
|
"route": &ctx.Cache{Name: "route", Value: "ssh", Help: "主机数量"},
|
||||||
},
|
},
|
||||||
Configs: map[string]*ctx.Config{
|
Configs: map[string]*ctx.Config{
|
||||||
"route": &ctx.Config{Name: "route", Value: "com", Help: "主机数量"},
|
"route": &ctx.Config{Name: "route", Value: "com", Help: "主机数量"},
|
||||||
@ -132,10 +132,9 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心",
|
|||||||
sub.Start(fmt.Sprintf("host%d", Pulse.Capi("nhost", 1)), "打开文件", sub.Meta["detail"]...)
|
sub.Start(fmt.Sprintf("host%d", Pulse.Capi("nhost", 1)), "打开文件", sub.Meta["detail"]...)
|
||||||
sub.Cap("stream", msg.Target().Name)
|
sub.Cap("stream", msg.Target().Name)
|
||||||
sub.Target().Sessions["file"] = msg
|
sub.Target().Sessions["file"] = msg
|
||||||
sub.Target(msg.Target())
|
|
||||||
sub.Echo(sub.Target().Name)
|
sub.Echo(sub.Target().Name)
|
||||||
sub.Spawn(sub.Target()).Cmd("send", "context", "ssh")
|
sub.Spawn(sub.Target()).Cmd("send", "context", "ssh")
|
||||||
sub.Spawn(sub.Target()).Cmd("send", "route", sub.Target().Name, msg.Cap("route")+"."+msg.Conf("route"))
|
sub.Spawn(sub.Target()).Cmd("send", "route", sub.Target().Name, msg.Cap("route"))
|
||||||
}
|
}
|
||||||
return false, true
|
return false, true
|
||||||
}, false).Cmd(m.Meta["detail"])
|
}, false).Cmd(m.Meta["detail"])
|
||||||
@ -145,6 +144,7 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心",
|
|||||||
msg := m.Sess("file", "nfs")
|
msg := m.Sess("file", "nfs")
|
||||||
msg.Call(func(ok bool) (done bool, up bool) {
|
msg.Call(func(ok bool) (done bool, up bool) {
|
||||||
if ok {
|
if ok {
|
||||||
|
m.Sess("file").Cmd("send", "context", "ssh")
|
||||||
m.Cap("stream", msg.Target().Name)
|
m.Cap("stream", msg.Target().Name)
|
||||||
return true, true
|
return true, true
|
||||||
}
|
}
|
||||||
@ -154,15 +154,53 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心",
|
|||||||
}},
|
}},
|
||||||
"send": &ctx.Command{Name: "send arg...", Help: "打开连接", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
|
"send": &ctx.Command{Name: "send arg...", Help: "打开连接", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
|
||||||
msg := m.Sess("file")
|
msg := m.Sess("file")
|
||||||
msg.Copy(m, "detail").Cmd()
|
msg.Copy(m, "detail").Call(func(ok bool) (done bool, up bool) {
|
||||||
|
return ok, ok
|
||||||
|
}, false).Cmd()
|
||||||
m.Copy(msg, "result")
|
m.Copy(msg, "result")
|
||||||
}},
|
}},
|
||||||
|
"pwd": &ctx.Command{Name: "pwd", Help: "远程执行", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
|
||||||
|
m.Echo(m.Cap("route"))
|
||||||
|
}},
|
||||||
"route": &ctx.Command{Name: "route", Help: "远程执行", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
|
"route": &ctx.Command{Name: "route", Help: "远程执行", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
|
||||||
m.Conf("route", arg[0])
|
m.Conf("route", arg[0])
|
||||||
m.Cap("route", arg[1]+"."+arg[0])
|
m.Cap("route", arg[1]+"."+arg[0])
|
||||||
}},
|
}},
|
||||||
"dispatch": &ctx.Command{Name: "dispatch cmd arg...", Help: "远程执行", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
|
"search": &ctx.Command{Name: "search route cmd arg...", Help: "远程执行", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
|
||||||
|
if _, ok := m.Target().Server.(*SSH); m.Assert(ok) {
|
||||||
|
if len(arg[0]) == 0 {
|
||||||
|
msg := m.Spawn(m.Target()).Cmd(arg[1:])
|
||||||
|
m.Copy(msg, "result")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
miss := true
|
||||||
|
target := strings.Split(arg[0], ".")
|
||||||
|
m.Travel(m.Target(), func(m *ctx.Message) bool {
|
||||||
|
if m.Target().Name == target[0] {
|
||||||
|
msg := m.Spawn(m.Target())
|
||||||
|
msg.Call(func(ok bool) (done bool, up bool) {
|
||||||
|
m.Copy(msg, "result")
|
||||||
|
return ok, ok
|
||||||
|
}, false).Cmd("send", "search", strings.Join(target[1:], "."), arg[1:])
|
||||||
|
|
||||||
|
miss = false
|
||||||
|
}
|
||||||
|
return miss
|
||||||
|
})
|
||||||
|
|
||||||
|
if miss {
|
||||||
|
msg := m.Spawn(c)
|
||||||
|
msg.Call(func(ok bool) (done bool, up bool) {
|
||||||
|
m.Copy(msg, "result")
|
||||||
|
return ok, ok
|
||||||
|
}, false).Cmd("send", "search", arg)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}},
|
||||||
|
"dispatch": &ctx.Command{Name: "dispatch route cmd arg...", Help: "远程执行", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
|
||||||
m.Travel(m.Target(), func(m *ctx.Message) bool {
|
m.Travel(m.Target(), func(m *ctx.Message) bool {
|
||||||
|
|
||||||
msg := m.Spawn(m.Target())
|
msg := m.Spawn(m.Target())
|
||||||
msg.Cmd("send", arg)
|
msg.Cmd("send", arg)
|
||||||
return true
|
return true
|
||||||
|
Loading…
x
Reference in New Issue
Block a user