mirror of
https://github.com/antos-rde/antosdk-apps.git
synced 2024-09-07 13:16:38 +02:00
150 lines
3.8 KiB
Lua
150 lines
3.8 KiB
Lua
local args=...
|
|
|
|
local handle = {}
|
|
|
|
local result = function(data)
|
|
return { error = false, result = data }
|
|
end
|
|
|
|
local error = function(msg)
|
|
return {error = msg, result = false}
|
|
end
|
|
|
|
local exec = function(host, rcmd, decode)
|
|
local user = SESSION.user
|
|
if not user then return nil end
|
|
local cmd = "ssh -tt "..user.."@"..host.." "..rcmd
|
|
if decode then
|
|
cmd = cmd.." --format \\'{{json .}}\\'"
|
|
end
|
|
local f = assert(io.popen(cmd, 'r'))
|
|
local s = assert(f:read('*a'))
|
|
f:close()
|
|
if decode then
|
|
s = s:gsub('[\n\r]+', ',')
|
|
return JSON.decodeString("["..s.."null]")
|
|
else
|
|
return s
|
|
end
|
|
end
|
|
|
|
handle.list_image = function(data)
|
|
local res = exec(data.host, "docker image ls", true)
|
|
if not res then
|
|
return error("Unable to fetch image list")
|
|
end
|
|
-- inspect images
|
|
for i,v in ipairs(res) do
|
|
v.Detail = exec(data.host, "docker image inspect "..v.ID, true)[1]
|
|
v.text = v.Detail.RepoTags[1]
|
|
if not v.text or v.text == "" then
|
|
v.text = v.ID
|
|
end
|
|
end
|
|
return result(res)
|
|
end
|
|
|
|
handle.list_container = function(data)
|
|
local res = exec(data.host, "docker ps -a -f ancestor="..data.image, true)
|
|
if not res then
|
|
return error("Unable to fetch container list")
|
|
end
|
|
for i,v in ipairs(res) do
|
|
v.Detail = exec(data.host, "docker container inspect "..v.ID, true)[1]
|
|
v.text = v.Names
|
|
|
|
if v.Detail.State.Running then
|
|
v.iconclass = "fa fa-circle running"
|
|
else
|
|
v.iconclass = "fa fa-circle stop"
|
|
end
|
|
end
|
|
return result(res)
|
|
end
|
|
|
|
handle.run_container = function(data)
|
|
local res = exec(data.host, "docker start "..data.id, false)
|
|
res = res:gsub('[\n\r]+', '')
|
|
if res == data.id then
|
|
return result("OK")
|
|
else
|
|
return error(res)
|
|
end
|
|
end
|
|
|
|
handle.pull_image = function(data)
|
|
local res = exec(data.host, "docker pull "..data.image, false)
|
|
return result(std.b64encode(res))
|
|
end
|
|
|
|
|
|
handle.rm_image = function(data)
|
|
local res = exec(data.host, "docker rmi "..data.id.."; sleep 2", false)
|
|
return result(res)
|
|
end
|
|
|
|
handle.create_container = function(data)
|
|
local cmd = "docker run "
|
|
for k,v in pairs(data.parameters) do
|
|
k = k:gsub(" ", "")
|
|
if k:len() == 1 then
|
|
cmd = cmd.." -"..k.." \""..v.."\" "
|
|
else
|
|
if k:match("^e_.*") then
|
|
cmd = cmd.." -e \""..k:gsub("e_","").."="..v.."\" "
|
|
else
|
|
cmd = cmd.." --"..k
|
|
if v ~= "" then
|
|
cmd = cmd.."=\""..v.."\" "
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
cmd = cmd.."--detach=true "..data.image
|
|
|
|
local res = exec(data.host, cmd, false)
|
|
return result(res)
|
|
end
|
|
|
|
handle.stop_container = function(data)
|
|
local res = exec(data.host, "docker stop "..data.id, false)
|
|
res = res:gsub('[\n\r]+', '')
|
|
if res == data.id then
|
|
return result("OK")
|
|
else
|
|
return error(res)
|
|
end
|
|
end
|
|
|
|
handle.restart_container = function(data)
|
|
local res = exec(data.host, "docker restart "..data.id, false)
|
|
res = res:gsub('[\n\r]+', '')
|
|
if res == data.id then
|
|
return result("OK")
|
|
else
|
|
return error(res)
|
|
end
|
|
end
|
|
|
|
handle.rm_container = function(data)
|
|
local res = exec(data.host, "docker stop "..data.id, false)
|
|
res = res:gsub('[\n\r]+', '')
|
|
if res == data.id then
|
|
local res = exec(data.host, "docker rm "..data.id, false)
|
|
res = res:gsub('[\n\r]+', '')
|
|
if res == data.id then
|
|
return result("OK")
|
|
else
|
|
error(res)
|
|
end
|
|
else
|
|
return error(res)
|
|
end
|
|
end
|
|
|
|
if args.action and handle[args.action] then
|
|
return handle[args.action](args.args)
|
|
else
|
|
return error("Invalid action parameter")
|
|
end |