1
0
mirror of https://shylinux.com/x/icebergs synced 2025-04-26 01:24:05 +08:00
This commit is contained in:
shaoying 2020-06-25 11:45:38 +08:00
parent 0d04318b47
commit 42fbc992a1
3 changed files with 111 additions and 111 deletions

View File

@ -12,6 +12,25 @@ import (
"strings"
)
func _port_list(m *ice.Message) string {
return ""
}
func _port_get(m *ice.Message) string {
current := kit.Int(m.Conf(PORT, "meta.current"))
end := kit.Int(m.Conf(PORT, "meta.end"))
if current >= end {
current = kit.Int(m.Conf(PORT, "meta.begin"))
}
for i := current; i < end; i++ {
if m.Cmd(cli.SYSTEM, "lsof", "-i", kit.Format(":%d", i)).Append(cli.CMD_CODE) != "0" {
m.Conf(PORT, "meta.current", i)
m.Log_CREATE(PORT, i)
return kit.Format("%d", i)
}
}
return ""
}
func _ip_list(m *ice.Message, ifname string) {
if ifs, e := net.Interfaces(); m.Assert(e) {
for _, v := range ifs {
@ -43,34 +62,8 @@ func _ip_islocal(m *ice.Message, ip string) (ok bool) {
return true
}
msg := m.Spawn()
_ip_list(msg, "")
msg.Table(func(index int, value map[string]string, head []string) {
if value["ip"] == ip {
ok = true
}
})
return ok
return m.Richs(IP, kit.Keys("meta.white"), ip, nil) != nil
}
func _port_list(m *ice.Message) string {
return ""
}
func _port_get(m *ice.Message) string {
current := kit.Int(m.Conf(PORT, "meta.current"))
end := kit.Int(m.Conf(PORT, "meta.end"))
if current >= end {
current = kit.Int(m.Conf(PORT, "meta.begin"))
}
for i := current; i < end; i++ {
if m.Cmd(cli.SYSTEM, "lsof", "-i", kit.Format(":%d", i)).Append(cli.CMD_CODE) != "0" {
m.Conf(PORT, "meta.current", i)
m.Log_CREATE(PORT, i)
return kit.Format("%d", i)
}
}
return ""
}
func IPIsLocal(m *ice.Message, ip string) bool {
return _ip_islocal(m, ip)
}
@ -82,15 +75,26 @@ const (
var Index = &ice.Context{Name: "tcp", Help: "通信模块",
Configs: map[string]*ice.Config{
PORT: &ice.Config{Name: "port", Help: "端口", Value: kit.Data(
PORT: {Name: "port", Help: "端口", Value: kit.Data(
"begin", 10000, "current", 10000, "end", 20000,
)},
IP: {Name: "ip", Help: "地址", Value: kit.Data(
"black", kit.Dict(),
"white", kit.Data(kit.MDB_SHORT, kit.MDB_TEXT),
)},
},
Commands: map[string]*ice.Command{
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Load() }},
ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Save(PORT) }},
IP: {Name: "ip", Help: "地址", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
IP: {Name: "ip", Help: "地址", Action: map[string]*ice.Action{
"white": {Name: "show ip", Help: "白名单", Hand: func(m *ice.Message, arg ...string) {
m.Rich(IP, kit.Keys("meta.white"), kit.Dict(
kit.MDB_NAME, "",
kit.MDB_TEXT, arg[0],
))
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
_ip_list(m, "")
}},
PORT: {Name: "port", Help: "端口", Action: map[string]*ice.Action{

View File

@ -4,6 +4,7 @@ import (
ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/cli"
"github.com/shylinux/icebergs/base/gdb"
"github.com/shylinux/icebergs/base/mdb"
"github.com/shylinux/icebergs/base/web"
"github.com/shylinux/icebergs/core/code"
kit "github.com/shylinux/toolkits"
@ -12,20 +13,86 @@ import (
)
const DOCKER = "docker"
const (
IMAGE = "image"
CONTAINER = "container"
)
var Index = &ice.Context{Name: "docker", Help: "虚拟机",
Caches: map[string]*ice.Cache{},
Configs: map[string]*ice.Config{
INSTALL: {Name: "install", Help: "安装", Value: kit.Data("path", "usr/install",
"linux", "https://dl.google.com/go/go1.14.2.linux-amd64.tar.gz",
"darwin", "https://dl.google.com/go/go1.14.2.darwin-amd64.pkg",
"windows", "https://dl.google.com/go/go1.14.2.windows-amd64.msi",
"source", "https://dl.google.com/go/go1.14.2.src.tar.gz",
"target", "usr/local",
)},
DOCKER: {Name: "docker", Help: "虚拟机", Value: kit.Data(kit.MDB_SHORT, "name", "build", []interface{}{})},
DOCKER: {Name: "docker", Help: "虚拟机", Value: kit.Data(
kit.MDB_SHORT, "name", "build", []interface{}{}),
},
},
Commands: map[string]*ice.Command{
IMAGE: {Name: "image", Help: "镜像管理", Meta: kit.Dict("detail", []string{"运行", "清理", "删除"}), List: ListLook("IMAGE_ID"), Action: map[string]*ice.Action{
"run": {Name: "run", Help: "运行", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(cli.SYSTEM, DOCKER, "run", "-dt", m.Option("REPOSITORY")+":"+m.Option("TAG"))
}},
"prune": {Name: "prune", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(cli.SYSTEM, DOCKER, "prune", "-f")
}},
mdb.DELETE: {Name: "delete", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(cli.SYSTEM, DOCKER, "rm", m.Option("IMAGE_ID"))
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
prefix := []string{cli.SYSTEM, DOCKER, IMAGE}
if len(arg) > 0 {
// 容器详情
res := m.Cmdx(prefix, "inspect", arg[0])
m.Push("detail", kit.KeyValue(map[string]interface{}{}, "", kit.Parse(nil, "", kit.Split(res)...)))
return
}
// 镜像列表
m.Split(strings.Replace(m.Cmdx(prefix, "ls"), "IMAGE ID", "IMAGE_ID", 1), "index", " ", "\n")
m.Sort("REPOSITORY")
}},
CONTAINER: {Name: "container", Help: "容器管理", List: ListLook("CONTAINER_ID"), Meta: kit.Dict("detail", []string{"进入", "启动", "停止", "重启", "清理", "编辑", "删除"}), Action: map[string]*ice.Action{
"prune": {Name: "prune", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(cli.SYSTEM, DOCKER, "prune", "-f")
m.Cmdy(prefix, "prune", "-f")
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
prefix := []string{cli.SYSTEM, DOCKER, CONTAINER}
if len(arg) > 1 && arg[0] == "action" {
switch arg[1] {
case "进入":
m.Cmdy(cli.SYSTEM, "tmux", "new-window", "-t", m.Option("NAMES"), "-n", m.Option("NAMES"),
"-PF", "#{session_name}:#{window_name}.1", "docker exec -it "+m.Option("NAMES")+" bash").Set("append")
return
case "停止":
m.Cmdy(prefix, "stop", m.Option("CONTAINER_ID"))
case "启动":
m.Cmdy(prefix, "start", m.Option("CONTAINER_ID"))
case "重启":
m.Cmdy(prefix, "restart", m.Option("CONTAINER_ID"))
case "清理":
m.Cmdy(prefix, "prune", "-f")
case "modify":
switch arg[2] {
case "NAMES":
m.Cmdy(prefix, "rename", arg[4], arg[3])
}
case "delete":
m.Cmdy(prefix, "rm", m.Option("CONTAINER_ID")).Set("append")
}
return
}
if len(arg) > 0 {
// 容器详情
res := m.Cmdx(prefix, "inspect", arg[0])
m.Push("detail", kit.KeyValue(map[string]interface{}{}, "", kit.Parse(nil, "", kit.Split(res)...)))
return
}
// 容器列表
m.Split(strings.Replace(m.Cmdx(prefix, "ls", "-a"), "CONTAINER ID", "CONTAINER_ID", 1), "index", " ", "\n")
m.Sort("NAMES")
}},
"init": {Name: "init", Help: "初始化", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Watch(gdb.DREAM_START, m.Prefix("auto"))
@ -65,77 +132,6 @@ var Index = &ice.Context{Name: "docker", Help: "虚拟机",
})
}},
"image": {Name: "image", Help: "镜像管理", Meta: kit.Dict("detail", []string{"运行", "清理", "删除"}), List: ListLook("IMAGE_ID"), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
prefix := []string{cli.SYSTEM, "docker", "image"}
if len(arg) > 1 && arg[0] == "action" {
switch arg[1] {
case "运行":
m.Cmdy(prefix[:2], "run", "-dt", m.Option("REPOSITORY")+":"+m.Option("TAG")).Set("append")
return
case "清理":
m.Cmdy(prefix, "prune", "-f").Set("append")
return
case "delete":
m.Cmdy(prefix, "rm", m.Option("IMAGE_ID")).Set("append")
return
}
}
if len(arg) > 0 {
// 容器详情
res := m.Cmdx(prefix, "inspect", arg[0])
m.Push("detail", kit.KeyValue(map[string]interface{}{}, "", kit.Parse(nil, "", kit.Split(res)...)))
return
}
if len(arg) > 0 {
// 下载镜像
m.Cmdy(prefix, "pull", arg[0]+":"+kit.Select("latest", arg, 1)).Set("append")
return
}
// 镜像列表
m.Split(strings.Replace(m.Cmdx(prefix, "ls"), "IMAGE ID", "IMAGE_ID", 1), "index", " ", "\n")
m.Sort("REPOSITORY")
}},
"container": {Name: "container", Help: "容器管理", List: ListLook("CONTAINER_ID"), Meta: kit.Dict("detail", []string{"进入", "启动", "停止", "重启", "清理", "编辑", "删除"}), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
prefix := []string{cli.SYSTEM, "docker", "container"}
if len(arg) > 1 && arg[0] == "action" {
switch arg[1] {
case "进入":
m.Cmdy(cli.SYSTEM, "tmux", "new-window", "-t", m.Option("NAMES"), "-n", m.Option("NAMES"),
"-PF", "#{session_name}:#{window_name}.1", "docker exec -it "+m.Option("NAMES")+" bash").Set("append")
return
case "停止":
m.Cmdy(prefix, "stop", m.Option("CONTAINER_ID"))
case "启动":
m.Cmdy(prefix, "start", m.Option("CONTAINER_ID"))
case "重启":
m.Cmdy(prefix, "restart", m.Option("CONTAINER_ID"))
case "清理":
m.Cmdy(prefix, "prune", "-f")
case "modify":
switch arg[2] {
case "NAMES":
m.Cmdy(prefix, "rename", arg[4], arg[3])
}
case "delete":
m.Cmdy(prefix, "rm", m.Option("CONTAINER_ID")).Set("append")
}
return
}
if len(arg) > 0 {
// 容器详情
res := m.Cmdx(prefix, "inspect", arg[0])
m.Push("detail", kit.KeyValue(map[string]interface{}{}, "", kit.Parse(nil, "", kit.Split(res)...)))
return
}
// 容器列表
m.Split(strings.Replace(m.Cmdx(prefix, "ls", "-a"), "CONTAINER ID", "CONTAINER_ID", 1), "index", " ", "\n")
m.Sort("NAMES")
}},
"command": {Name: "command", Help: "命令", List: kit.List(
kit.MDB_INPUT, "text", "name", "CONTAINER_ID",
kit.MDB_INPUT, "text", "name", "cmd", "className", "args cmd",

View File

@ -78,7 +78,7 @@ var Index = &ice.Context{Name: "totp", Help: "动态码",
if len(arg) == 1 {
// 创建密钥
arg = append(arg, gen(30))
arg = append(arg, _totp_gen(30))
}
// 添加密钥
@ -94,7 +94,7 @@ var Index = &ice.Context{Name: "totp", Help: "动态码",
m.Push("time", m.Time())
m.Push("rest", per-time.Now().Unix()%per)
m.Push("name", value["name"])
m.Push("code", get(kit.Format(value["text"]), kit.Int(kit.Select("6", value["number"])), per))
m.Push("code", _totp_get(kit.Format(value["text"]), kit.Int(kit.Select("6", value["number"])), per))
})
return
@ -102,7 +102,7 @@ var Index = &ice.Context{Name: "totp", Help: "动态码",
m.Richs("totp", nil, arg[0], func(key string, value map[string]interface{}) {
// 获取密码
m.Echo(get(kit.Format(value["text"]), kit.Int(kit.Select("6", arg, 1)), kit.Int64(kit.Select("30", arg, 2))))
m.Echo(_totp_get(kit.Format(value["text"]), kit.Int(kit.Select("6", arg, 1)), kit.Int64(kit.Select("30", arg, 2))))
})
}},
},