mirror of
https://shylinux.com/x/icebergs
synced 2025-05-02 11:37:01 +08:00
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.Option(ice.MSG_ARGS, kit.Simple(http.StatusBadRequest, cmd.Args, err.String()))
|
||||||
m.Echo(strings.TrimRight(err.String(), lex.NL))
|
m.Echo(strings.TrimRight(err.String(), lex.NL))
|
||||||
m.Info("err: %v", err.String())
|
m.Info("err: %v", err.String())
|
||||||
|
m.Info("out: %v", out.String())
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
@ -155,10 +156,12 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
SH = "sh"
|
SH = "sh"
|
||||||
LN = "ln"
|
LN = "ln"
|
||||||
MV = "mv"
|
MV = "mv"
|
||||||
RM = "rm"
|
RM = "rm"
|
||||||
|
CD = "cd"
|
||||||
|
CAT = "cat"
|
||||||
|
|
||||||
FIND = "find"
|
FIND = "find"
|
||||||
GREP = "grep"
|
GREP = "grep"
|
||||||
|
@ -1,42 +1,103 @@
|
|||||||
package relay
|
package relay
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"strings"
|
||||||
|
|
||||||
"shylinux.com/x/ice"
|
"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/mdb"
|
||||||
|
"shylinux.com/x/icebergs/base/nfs"
|
||||||
|
"shylinux.com/x/icebergs/base/tcp"
|
||||||
"shylinux.com/x/icebergs/base/web"
|
"shylinux.com/x/icebergs/base/web"
|
||||||
"shylinux.com/x/icebergs/misc/ssh"
|
"shylinux.com/x/icebergs/misc/ssh"
|
||||||
kit "shylinux.com/x/toolkits"
|
kit "shylinux.com/x/toolkits"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
SSH_AUTHS = "ssh.auths"
|
SSH_AUTHS = "ssh.auths"
|
||||||
|
SSH_AUTH_KEYS = ".ssh/authorized_keys"
|
||||||
)
|
)
|
||||||
|
|
||||||
type auths struct {
|
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) {
|
func (s auths) List(m *ice.Message, arg ...string) {
|
||||||
list := map[string]map[string]bool{}
|
list := map[string]map[string]bool{}
|
||||||
head := []string{}
|
head := []string{}
|
||||||
m.AdminCmd(web.DREAM, web.ORIGIN).Table(func(val ice.Maps) {
|
m.Cmd(s.relay).GoToastTable(tcp.MACHINE, func(val ice.Maps) {
|
||||||
head = append(head, val[mdb.NAME])
|
head = append(head, val[tcp.MACHINE])
|
||||||
m.AdminCmd(web.SPACE, val[mdb.NAME], ssh.RSA, ssh.AUTHS).Table(func(value ice.Maps) {
|
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 _, ok := list[value[mdb.NAME]]; !ok {
|
if ls := kit.Split(text); len(ls) > 2 {
|
||||||
list[value[mdb.NAME]] = map[string]bool{}
|
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) {
|
for _, server := range kit.SortedKey(list) {
|
||||||
kit.For(head, func(key string) {
|
ls := kit.Split(server, "@")
|
||||||
if data, ok := list[value[mdb.NAME]]; ok && data[key] {
|
m.Push(aaa.USERNAME, ls[0]).Push(web.SERVER, ls[1])
|
||||||
m.Push(key, "ok")
|
keys := list[server]
|
||||||
|
for _, k := range head {
|
||||||
|
if keys[k] {
|
||||||
|
m.Push(k, keys[k])
|
||||||
} else {
|
} else {
|
||||||
m.Push(key, "")
|
m.Push(k, "")
|
||||||
}
|
}
|
||||||
})
|
}
|
||||||
})
|
}
|
||||||
|
m.PushAction(s.Delete).Action(s.Insert)
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() { ice.Cmd(SSH_AUTHS, auths{}) }
|
func init() { ice.Cmd(SSH_AUTHS, auths{}) }
|
||||||
|
@ -60,22 +60,24 @@ const (
|
|||||||
type relay struct {
|
type relay struct {
|
||||||
ice.Hash
|
ice.Hash
|
||||||
ice.Code
|
ice.Code
|
||||||
checkbox string `data:"true"`
|
checkbox string `data:"true"`
|
||||||
export string `data:"true"`
|
export string `data:"true"`
|
||||||
short string `data:"machine"`
|
short string `data:"machine"`
|
||||||
tools string `data:"ssh.trans,ssh.auths,aaa.rsa"`
|
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"`
|
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"`
|
create string `name:"create host* port=22 username=root machine icons"`
|
||||||
upgrade string `name:"upgrade machine"`
|
upgrade string `name:"upgrade machine"`
|
||||||
stats string `name:"stats machine" icon:"bi bi-card-list"`
|
stats string `name:"stats machine" icon:"bi bi-card-list"`
|
||||||
publish string `name:"publish" icon:"bi bi-send-check"`
|
publish string `name:"publish" icon:"bi bi-send-check"`
|
||||||
forEach string `name:"forEach machine cmd*:textarea=pwd"`
|
forEach string `name:"forEach machine cmd*:textarea=pwd"`
|
||||||
forFlow string `name:"forFlow machine cmd*:textarea=pwd"`
|
forFlow string `name:"forFlow machine cmd*:textarea=pwd"`
|
||||||
list string `name:"list machine auto" help:"机器" icon:"relay.png"`
|
list string `name:"list machine auto" help:"机器" icon:"relay.png"`
|
||||||
install string `name:"install dream portal nodename dev"`
|
opsServerOpen string `name:"opsServerOpen" event:"ops.server.open"`
|
||||||
pushbin string `name:"pushbin dream portal nodename dev" icon:"bi bi-box-arrow-in-up"`
|
opsDreamSpawn string `name:"opsDreamSpawn" event:"ops.dream.spawn"`
|
||||||
adminCmd string `name:"adminCmd cmd" icon:"bi bi-terminal-plus"`
|
install string `name:"install dream portal nodename dev"`
|
||||||
pushkey string `name:"pushkey server" icon:"bi bi-person-fill-up"`
|
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) {
|
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))
|
m.StatusTimeCount(m.Spawn().Options(stats, _stats).OptionSimple(VCPU, MEM, DISK, SOCKET, PROC))
|
||||||
return m
|
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) {
|
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)))
|
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)...)
|
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 {
|
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)))) })
|
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(
|
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 {
|
type Relay struct {
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"stats": "采集",
|
"stats": "采集",
|
||||||
|
"auths": "授权",
|
||||||
"spide": "连接",
|
"spide": "连接",
|
||||||
"adminCmd": "命令",
|
"adminCmd": "命令",
|
||||||
"pushbin": "部署",
|
"pushbin": "部署",
|
||||||
|
@ -35,8 +35,6 @@ func init() {
|
|||||||
)
|
)
|
||||||
aaa.Index.MergeCommands(ice.Commands{
|
aaa.Index.MergeCommands(ice.Commands{
|
||||||
RSA: {Name: "rsa hash auto", Help: "密钥", Actions: ice.MergeActions(ice.Actions{
|
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) {
|
mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
|
||||||
switch arg[0] {
|
switch arg[0] {
|
||||||
case TITLE:
|
case TITLE:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user