forked from x/ContextOS
mac mod ssh.send
This commit is contained in:
parent
4456c45258
commit
1ad0af36cb
@ -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},
|
||||
|
@ -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)
|
||||
|
@ -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"))
|
||||
|
Loading…
x
Reference in New Issue
Block a user