forked from x/icebergs
add some
This commit is contained in:
parent
144bacc365
commit
2075f6e227
@ -97,6 +97,7 @@ func _system_exec(m *ice.Message, cmd *exec.Cmd) {
|
||||
m.Option(ice.MSG_ARGS, kit.Simple(http.StatusBadRequest, cmd.Args, err.String()))
|
||||
m.Echo(strings.TrimRight(err.String(), lex.NL))
|
||||
m.Info("err: %v", err.String())
|
||||
m.Info("out: %v", out.String())
|
||||
}
|
||||
}()
|
||||
}
|
||||
@ -155,10 +156,12 @@ const (
|
||||
)
|
||||
|
||||
const (
|
||||
SH = "sh"
|
||||
LN = "ln"
|
||||
MV = "mv"
|
||||
RM = "rm"
|
||||
SH = "sh"
|
||||
LN = "ln"
|
||||
MV = "mv"
|
||||
RM = "rm"
|
||||
CD = "cd"
|
||||
CAT = "cat"
|
||||
|
||||
FIND = "find"
|
||||
GREP = "grep"
|
||||
|
@ -1,42 +1,103 @@
|
||||
package relay
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"shylinux.com/x/ice"
|
||||
"shylinux.com/x/icebergs/base/aaa"
|
||||
"shylinux.com/x/icebergs/base/cli"
|
||||
"shylinux.com/x/icebergs/base/ctx"
|
||||
"shylinux.com/x/icebergs/base/lex"
|
||||
"shylinux.com/x/icebergs/base/mdb"
|
||||
"shylinux.com/x/icebergs/base/nfs"
|
||||
"shylinux.com/x/icebergs/base/tcp"
|
||||
"shylinux.com/x/icebergs/base/web"
|
||||
"shylinux.com/x/icebergs/misc/ssh"
|
||||
kit "shylinux.com/x/toolkits"
|
||||
)
|
||||
|
||||
const (
|
||||
SSH_AUTHS = "ssh.auths"
|
||||
SSH_AUTHS = "ssh.auths"
|
||||
SSH_AUTH_KEYS = ".ssh/authorized_keys"
|
||||
)
|
||||
|
||||
type auths struct {
|
||||
list string `name:"list auto"`
|
||||
relay
|
||||
insert string `name:"insert machine* server*"`
|
||||
list string `name:"list auto"`
|
||||
}
|
||||
|
||||
func (s auths) Inputs(m *ice.Message, arg ...string) {
|
||||
switch arg[0] {
|
||||
case MACHINE:
|
||||
m.Cmdy(s.relay).Cut(arg[0], mdb.ICONS)
|
||||
m.DisplayInputKeyNameIcon()
|
||||
case web.SERVER:
|
||||
m.AdminCmd(web.DREAM, web.SERVER).Table(func(value ice.Maps) {
|
||||
if value[nfs.MODULE] == ice.Info.Make.Module {
|
||||
m.Push(arg[0], value[mdb.NAME])
|
||||
m.Push(mdb.ICONS, value[mdb.ICONS])
|
||||
m.Push(nfs.MODULE, value[nfs.MODULE])
|
||||
}
|
||||
})
|
||||
m.DisplayInputKeyNameIcon()
|
||||
}
|
||||
}
|
||||
func (s auths) Insert(m *ice.Message, arg ...string) {
|
||||
m.Options(m.Cmd(s.relay, m.Option(tcp.MACHINE)).AppendSimple())
|
||||
msg := m.AdminCmd(web.SPACE, m.Option(web.SERVER), ssh.RSA, ssh.PUBLIC)
|
||||
if msg.IsErr() {
|
||||
m.Copy(msg)
|
||||
return
|
||||
}
|
||||
key := msg.Result()
|
||||
list := strings.Split(strings.TrimSpace(m.Cmd(cli.SYSTEM, kit.Split(s.CmdArgs(m, cli.CD, ctx.CMDS, cli.CAT+lex.SP+SSH_AUTH_KEYS), lex.SP, lex.SP)).Result()), lex.NL)
|
||||
if kit.IndexOf(list, key) == -1 {
|
||||
m.Cmd(cli.SYSTEM, kit.Split(s.CmdArgs(m, cli.CD), lex.SP, lex.SP), ctx.CMDS, kit.Format(`echo -e %q >> `+SSH_AUTH_KEYS, key))
|
||||
}
|
||||
}
|
||||
func (s auths) Delete(m *ice.Message, arg ...string) {
|
||||
m.Cmd(s.relay).GoToastTable(tcp.MACHINE, func(val ice.Maps) {
|
||||
if m.Option(val[MACHINE]) != ice.TRUE {
|
||||
return
|
||||
}
|
||||
list := []string{}
|
||||
kit.For(strings.Split(strings.TrimSpace(m.Cmd(cli.SYSTEM, kit.Split(s.CmdArgs(m.Spawn(val), cli.CD, ctx.CMDS, cli.CAT+lex.SP+SSH_AUTH_KEYS), lex.SP, lex.SP)).Result()), lex.NL), func(text string) {
|
||||
if ls := kit.Split(text); len(ls) > 2 {
|
||||
kit.If(ls[2] != kit.Format("%s@%s", m.Option(aaa.USERNAME), m.Option(web.SERVER)), func() { list = append(list, text) })
|
||||
}
|
||||
})
|
||||
m.Push(MACHINE, val[MACHINE]).Push(mdb.TEXT, strings.Join(list, lex.NL))
|
||||
m.Cmd(cli.SYSTEM, kit.Split(s.CmdArgs(m.Spawn(val), cli.CD), lex.SP, lex.SP), ctx.CMDS, kit.Format(`echo -e %q > `+SSH_AUTH_KEYS, strings.Join(list, lex.NL)))
|
||||
})
|
||||
}
|
||||
func (s auths) List(m *ice.Message, arg ...string) {
|
||||
list := map[string]map[string]bool{}
|
||||
head := []string{}
|
||||
m.AdminCmd(web.DREAM, web.ORIGIN).Table(func(val ice.Maps) {
|
||||
head = append(head, val[mdb.NAME])
|
||||
m.AdminCmd(web.SPACE, val[mdb.NAME], ssh.RSA, ssh.AUTHS).Table(func(value ice.Maps) {
|
||||
if _, ok := list[value[mdb.NAME]]; !ok {
|
||||
list[value[mdb.NAME]] = map[string]bool{}
|
||||
m.Cmd(s.relay).GoToastTable(tcp.MACHINE, func(val ice.Maps) {
|
||||
head = append(head, val[tcp.MACHINE])
|
||||
kit.For(strings.Split(strings.TrimSpace(m.Cmd(cli.SYSTEM, kit.Split(s.CmdArgs(m.Spawn(val), cli.CD, ctx.CMDS, cli.CAT+lex.SP+SSH_AUTH_KEYS), lex.SP, lex.SP)).Result()), lex.NL), func(text string) {
|
||||
if ls := kit.Split(text); len(ls) > 2 {
|
||||
if _, ok := list[ls[2]]; !ok {
|
||||
list[ls[2]] = map[string]bool{}
|
||||
}
|
||||
list[ls[2]][val[tcp.MACHINE]] = true
|
||||
}
|
||||
list[value[mdb.NAME]][val[mdb.NAME]] = true
|
||||
})
|
||||
})
|
||||
m.AdminCmd(web.DREAM, web.SERVER).Table(func(value ice.Maps) {
|
||||
kit.For(head, func(key string) {
|
||||
if data, ok := list[value[mdb.NAME]]; ok && data[key] {
|
||||
m.Push(key, "ok")
|
||||
for _, server := range kit.SortedKey(list) {
|
||||
ls := kit.Split(server, "@")
|
||||
m.Push(aaa.USERNAME, ls[0]).Push(web.SERVER, ls[1])
|
||||
keys := list[server]
|
||||
for _, k := range head {
|
||||
if keys[k] {
|
||||
m.Push(k, keys[k])
|
||||
} else {
|
||||
m.Push(key, "")
|
||||
m.Push(k, "")
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
m.PushAction(s.Delete).Action(s.Insert)
|
||||
}
|
||||
|
||||
func init() { ice.Cmd(SSH_AUTHS, auths{}) }
|
||||
|
@ -60,22 +60,24 @@ const (
|
||||
type relay struct {
|
||||
ice.Hash
|
||||
ice.Code
|
||||
checkbox string `data:"true"`
|
||||
export string `data:"true"`
|
||||
short string `data:"machine"`
|
||||
tools string `data:"ssh.trans,ssh.auths,aaa.rsa"`
|
||||
field string `data:"time,icons,machine,username,host,port,portal,dream,module,version,commitTime,compileTime,bootTime,go,git,package,shell,kernel,arch,vcpu,ncpu,mhz,mem,disk,network,listen,socket,proc,vendor"`
|
||||
create string `name:"create host* port=22 username=root machine icons"`
|
||||
upgrade string `name:"upgrade machine"`
|
||||
stats string `name:"stats machine" icon:"bi bi-card-list"`
|
||||
publish string `name:"publish" icon:"bi bi-send-check"`
|
||||
forEach string `name:"forEach machine cmd*:textarea=pwd"`
|
||||
forFlow string `name:"forFlow machine cmd*:textarea=pwd"`
|
||||
list string `name:"list machine auto" help:"机器" icon:"relay.png"`
|
||||
install string `name:"install dream portal nodename dev"`
|
||||
pushbin string `name:"pushbin dream portal nodename dev" icon:"bi bi-box-arrow-in-up"`
|
||||
adminCmd string `name:"adminCmd cmd" icon:"bi bi-terminal-plus"`
|
||||
pushkey string `name:"pushkey server" icon:"bi bi-person-fill-up"`
|
||||
checkbox string `data:"true"`
|
||||
export string `data:"true"`
|
||||
short string `data:"machine"`
|
||||
tools string `data:"ssh.trans,ssh.auths,aaa.rsa"`
|
||||
field string `data:"time,icons,machine,username,host,port,portal,dream,module,version,commitTime,compileTime,bootTime,go,git,package,shell,kernel,arch,vcpu,ncpu,mhz,mem,disk,network,listen,socket,proc,vendor"`
|
||||
create string `name:"create host* port=22 username=root machine icons"`
|
||||
upgrade string `name:"upgrade machine"`
|
||||
stats string `name:"stats machine" icon:"bi bi-card-list"`
|
||||
publish string `name:"publish" icon:"bi bi-send-check"`
|
||||
forEach string `name:"forEach machine cmd*:textarea=pwd"`
|
||||
forFlow string `name:"forFlow machine cmd*:textarea=pwd"`
|
||||
list string `name:"list machine auto" help:"机器" icon:"relay.png"`
|
||||
opsServerOpen string `name:"opsServerOpen" event:"ops.server.open"`
|
||||
opsDreamSpawn string `name:"opsDreamSpawn" event:"ops.dream.spawn"`
|
||||
install string `name:"install dream portal nodename dev"`
|
||||
pushbin string `name:"pushbin dream portal nodename dev" icon:"bi bi-box-arrow-in-up"`
|
||||
adminCmd string `name:"adminCmd cmd" icon:"bi bi-terminal-plus"`
|
||||
pushkey string `name:"pushkey server" icon:"bi bi-person-fill-up"`
|
||||
}
|
||||
|
||||
func (s relay) Init(m *ice.Message, arg ...string) {
|
||||
@ -243,6 +245,20 @@ func (s relay) List(m *ice.Message, arg ...string) *ice.Message {
|
||||
m.StatusTimeCount(m.Spawn().Options(stats, _stats).OptionSimple(VCPU, MEM, DISK, SOCKET, PROC))
|
||||
return m
|
||||
}
|
||||
func (s relay) OpsDreamSpawn(m *ice.Message, arg ...string) {
|
||||
kit.If(m.Option(mdb.NAME) == ice.Info.NodeName, func() { s.sendData(m, kit.Keys(m.Option(web.DOMAIN), m.Option(mdb.NAME))) })
|
||||
}
|
||||
func (s relay) OpsServerOpen(m *ice.Message, arg ...string) {
|
||||
kit.If(m.Option(nfs.MODULE) == ice.Info.Make.Module, func() { s.sendData(m, m.Option(mdb.NAME)) })
|
||||
}
|
||||
func (s relay) sendData(m *ice.Message, space string) {
|
||||
if m.IsTech() {
|
||||
m.Cmd("").Table(func(value ice.Maps) {
|
||||
m.AdminCmd(web.SPACE, space, m.PrefixKey(), mdb.CREATE, tcp.HOST, "", kit.Simple(value))
|
||||
m.Cmd(SSH_AUTHS, mdb.INSERT, value[MACHINE], space, kit.Dict(ice.SPACE_NOECHO, ice.FALSE))
|
||||
})
|
||||
}
|
||||
}
|
||||
func (s relay) Install(m *ice.Message, arg ...string) {
|
||||
m.Options(web.DOMAIN, m.SpideOrigin(ice.DEV), ice.MSG_USERPOD, m.Option(web.DREAM), nfs.SOURCE, m.DreamRepos(m.Option(web.DREAM)))
|
||||
s.Modify(m, m.OptionSimple(MACHINE, web.DREAM, web.PORTAL)...)
|
||||
@ -383,7 +399,7 @@ func (s relay) param(m *ice.Message, arg ...string) string {
|
||||
func (s relay) CmdArgs(m *ice.Message, init string, arg ...string) string {
|
||||
kit.If(m.Option(web.PORTAL) != "" && init == "", func() { init = kit.Format("%q", "cd "+path.Base(m.DreamPath(m.Option(web.DREAM)))) })
|
||||
return strings.TrimPrefix(os.Args[0], kit.Path("")+nfs.PS) + " " + kit.JoinCmds(kit.Simple(
|
||||
SSH_CONNECT, tcp.OPEN, ssh.AUTHFILE, "", m.OptionSimple(aaa.USERNAME, tcp.HOST, tcp.PORT), ice.INIT, init)...)
|
||||
SSH_CONNECT, tcp.OPEN, ssh.AUTHFILE, "", m.OptionSimple(aaa.USERNAME, tcp.HOST, tcp.PORT), ice.INIT, init, arg)...)
|
||||
}
|
||||
|
||||
type Relay struct {
|
||||
|
@ -1,5 +1,6 @@
|
||||
{
|
||||
"stats": "采集",
|
||||
"auths": "授权",
|
||||
"spide": "连接",
|
||||
"adminCmd": "命令",
|
||||
"pushbin": "部署",
|
||||
|
@ -35,8 +35,6 @@ func init() {
|
||||
)
|
||||
aaa.Index.MergeCommands(ice.Commands{
|
||||
RSA: {Name: "rsa hash auto", Help: "密钥", Actions: ice.MergeActions(ice.Actions{
|
||||
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
|
||||
}},
|
||||
mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
|
||||
switch arg[0] {
|
||||
case TITLE:
|
||||
|
Loading…
x
Reference in New Issue
Block a user