支持容器的删除

This commit is contained in:
anlicheng 2025-10-27 17:36:59 +08:00
parent 37858ea7a0
commit 184909aea3
5 changed files with 63 additions and 2 deletions

View File

@ -348,6 +348,38 @@ json_error(ErrCode, ErrMessage) when is_integer(ErrCode), is_binary(ErrMessage)
} }
``` ```
### 6 删除容器
**URL**`/container/remove`
**Method**`POST`
#### 请求参数
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| uuid | binary (string) | ✅ | 主机唯一标识符 |
| container_name | binary (string) | ✅ | 容器名称 |
### 请求示例
```json
{"uuid": "qbxmjyzrkpntfgswaevodhluicqzxplkm", "container_name": "my_nginx_new"}
```
#### 响应参数
| 字段 | 类型 | 说明 |
|------|------|------|
| result | map | 停止结果 |
#### 示例响应
```json
{
"result": {
"container_name": "sensor_service",
"status": "stopped"
}
}
```
#### 错误响应 #### 错误响应
```json ```json
{ {

View File

@ -116,6 +116,25 @@ handle_request("POST", "/container/stop", _, #{<<"uuid">> := UUID, <<"container_
end end
end; end;
%%
handle_request("POST", "/container/remove", _, #{<<"uuid">> := UUID, <<"container_name">> := ContainerName}) when is_binary(UUID), is_binary(ContainerName) ->
case iot_host:get_pid(UUID) of
undefined ->
{ok, 200, iot_util:json_error(404, <<"host not found">>)};
Pid when is_pid(Pid) ->
case iot_host:remove_container(Pid, ContainerName) of
{ok, Ref} ->
case iot_host:await_reply(Ref, 5000) of
{ok, Result} ->
{ok, 200, iot_util:json_data(Result)};
{error, Reason} ->
{ok, 200, iot_util:json_error(400, Reason)}
end;
{error, Reason} when is_binary(Reason) ->
{ok, 200, iot_util:json_error(400, Reason)}
end
end;
%handle_request("POST", "/container/task_log", _, #{<<"uuid">> := UUID, <<"task_id">> := TaskId}) when is_binary(UUID), is_integer(TaskId) -> %handle_request("POST", "/container/task_log", _, #{<<"uuid">> := UUID, <<"task_id">> := TaskId}) when is_binary(UUID), is_integer(TaskId) ->
% case iot_host:get_pid(UUID) of % case iot_host:get_pid(UUID) of
% undefined -> % undefined ->

View File

@ -25,7 +25,7 @@
-export([get_metric/1, get_status/1]). -export([get_metric/1, get_status/1]).
%% %%
-export([pub/3, attach_channel/2, command/3]). -export([pub/3, attach_channel/2, command/3]).
-export([deploy_container/3, start_container/2, stop_container/2, config_container/3, get_containers/1, await_reply/2]). -export([deploy_container/3, start_container/2, stop_container/2, remove_container/2, config_container/3, get_containers/1, await_reply/2]).
%% %%
-export([reload_device/2, delete_device/2, activate_device/3]). -export([reload_device/2, delete_device/2, activate_device/3]).
-export([heartbeat/1]). -export([heartbeat/1]).
@ -119,6 +119,12 @@ stop_container(Pid, ContainerName) when is_pid(Pid), is_binary(ContainerName) ->
EncCallBin = message_codec:encode(?MESSAGE_JSONRPC_REQUEST, Request), EncCallBin = message_codec:encode(?MESSAGE_JSONRPC_REQUEST, Request),
gen_statem:call(Pid, {jsonrpc_call, self(), EncCallBin}). gen_statem:call(Pid, {jsonrpc_call, self(), EncCallBin}).
-spec remove_container(Pid :: pid(), ContainerName :: binary()) -> {ok, Ref :: reference()} | {error, Reason :: any()}.
remove_container(Pid, ContainerName) when is_pid(Pid), is_binary(ContainerName) ->
Request = #jsonrpc_request{method = <<"remove_container">>, params = #{<<"container_name">> => ContainerName}},
EncCallBin = message_codec:encode(?MESSAGE_JSONRPC_REQUEST, Request),
gen_statem:call(Pid, {jsonrpc_call, self(), EncCallBin}).
%-spec task_log(Pid :: pid(), TaskId :: integer()) -> {ok, Ref :: reference()} | {error, Reason :: any()}. %-spec task_log(Pid :: pid(), TaskId :: integer()) -> {ok, Ref :: reference()} | {error, Reason :: any()}.
%task_log(Pid, TaskId) when is_pid(Pid), is_integer(TaskId) -> %task_log(Pid, TaskId) when is_pid(Pid), is_integer(TaskId) ->
% TaskLogBin = message_pb:encode_msg(#fetch_task_log{task_id = TaskId}), % TaskLogBin = message_pb:encode_msg(#fetch_task_log{task_id = TaskId}),

View File

@ -9,7 +9,7 @@
{jiffy, ".*", {git, "https://github.com/davisp/jiffy.git", {tag, "1.1.1"}}}, {jiffy, ".*", {git, "https://github.com/davisp/jiffy.git", {tag, "1.1.1"}}},
{mysql, ".*", {git, "https://github.com/mysql-otp/mysql-otp", {tag, "1.8.0"}}}, {mysql, ".*", {git, "https://github.com/mysql-otp/mysql-otp", {tag, "1.8.0"}}},
{eredis, ".*", {git, "https://github.com/wooga/eredis.git", {tag, "v1.2.0"}}}, {eredis, ".*", {git, "https://github.com/wooga/eredis.git", {tag, "v1.2.0"}}},
%{emqtt, ".*", {git, "https://gitea.s5s8.com/anlicheng/emqtt.git", {branch, "main"}}}, {emqtt, ".*", {git, "https://gitea.s5s8.com/anlicheng/emqtt.git", {branch, "main"}}},
{gproc, ".*", {git, "https://github.com/uwiger/gproc.git", {tag, "0.9.1"}}}, {gproc, ".*", {git, "https://github.com/uwiger/gproc.git", {tag, "0.9.1"}}},
{parse_trans, ".*", {git, "https://github.com/uwiger/parse_trans", {tag, "3.0.0"}}}, {parse_trans, ".*", {git, "https://github.com/uwiger/parse_trans", {tag, "3.0.0"}}},
{lager, ".*", {git,"https://github.com/erlang-lager/lager.git", {tag, "3.9.2"}}} {lager, ".*", {git,"https://github.com/erlang-lager/lager.git", {tag, "3.9.2"}}}

View File

@ -13,6 +13,10 @@
{ref,"aca0ad953417b29bab2c41eeb4c37c98606c848b"}}, {ref,"aca0ad953417b29bab2c41eeb4c37c98606c848b"}},
1}, 1},
{<<"crc32cer">>,{pkg,<<"crc32cer">>,<<"1.0.3">>},2}, {<<"crc32cer">>,{pkg,<<"crc32cer">>,<<"1.0.3">>},2},
{<<"emqtt">>,
{git,"https://gitea.s5s8.com/anlicheng/emqtt.git",
{ref,"5111914a9b1b92b0b497f825c77bdd365e3989b0"}},
0},
{<<"eredis">>, {<<"eredis">>,
{git,"https://github.com/wooga/eredis.git", {git,"https://github.com/wooga/eredis.git",
{ref,"9ad91f149310a7d002cb966f62b7e2c3330abb04"}}, {ref,"9ad91f149310a7d002cb966f62b7e2c3330abb04"}},