iSulad/0049-support-pull-option-when-create-run-container.patch
WangFengTu b1ffa045c4 iSulad: sync with upstream iSulad
Signed-off-by: WangFengTu <wangfengtu@huawei.com>
2021-05-18 14:48:15 +08:00

117 lines
5.4 KiB
Diff

From 4692715e4ef7e1ec5461b03940f85cac4af8b18e Mon Sep 17 00:00:00 2001
From: WangFengTu <wangfengtu@huawei.com>
Date: Sat, 27 Feb 2021 10:44:26 +0800
Subject: [PATCH 049/104] support --pull option when create/run container
Signed-off-by: WangFengTu <wangfengtu@huawei.com>
---
src/cmd/isula/base/create.c | 24 +++++++++++++++++++++++-
src/cmd/isula/base/create.h | 7 +++++++
src/cmd/isula/base/run.c | 1 +
src/cmd/isula/client_arguments.h | 1 +
4 files changed, 32 insertions(+), 1 deletion(-)
diff --git a/src/cmd/isula/base/create.c b/src/cmd/isula/base/create.c
index a531fc0e..48dc29be 100644
--- a/src/cmd/isula/base/create.c
+++ b/src/cmd/isula/base/create.c
@@ -59,6 +59,7 @@ struct client_arguments g_cmd_create_args = {
.custom_conf.health_timeout = 0,
.custom_conf.health_start_period = 0,
.custom_conf.health_retries = 0,
+ .pull = "missing"
};
static void request_pack_host_config_limit(const struct client_arguments *args, isula_host_config_t *hostconfig)
@@ -1268,9 +1269,17 @@ static int client_try_to_create(const struct client_arguments *args, const struc
goto out;
}
+ if (strcmp(args->pull, "always") == 0) {
+ ret = client_pull(args);
+ if (ret != 0) {
+ goto out;
+ }
+ }
+
ret = do_client_create(args, ops, request, response);
if (ret != 0) {
- if (response->errmsg == NULL || strstr(response->errmsg, IMAGE_NOT_FOUND_ERROR) == NULL) {
+ if (response->errmsg == NULL || strstr(response->errmsg, IMAGE_NOT_FOUND_ERROR) == NULL ||
+ strcmp(args->pull, "missing") != 0) {
client_print_error(response->cc, response->server_errono, response->errmsg);
goto out;
}
@@ -1299,6 +1308,14 @@ out:
return ret;
}
+static bool valid_pull_option(const char *pull)
+{
+ if (strcmp(pull, "always") == 0 || strcmp(pull, "missing") == 0 || strcmp(pull, "never") == 0) {
+ return true;
+ }
+ return false;
+}
+
/*
* Create a create request message and call RPC
*/
@@ -1551,6 +1568,11 @@ int cmd_create_main(int argc, const char **argv)
exit(ECOMMON);
}
+ if (!valid_pull_option(g_cmd_create_args.pull)) {
+ COMMAND_ERROR("invalid --pull option, only \"always\"|\"missing\"|\"never\" is allowed");
+ exit(ECOMMON);
+ }
+
ret = client_create(&g_cmd_create_args);
if (ret != 0) {
ERROR("Container \"%s\" create failed", g_cmd_create_args.name);
diff --git a/src/cmd/isula/base/create.h b/src/cmd/isula/base/create.h
index 1c455d40..610a289f 100644
--- a/src/cmd/isula/base/create.h
+++ b/src/cmd/isula/base/create.h
@@ -276,6 +276,13 @@ extern "C" {
&(cmdargs).custom_conf.privileged, \
"Give extended privileges to this container", \
NULL }, \
+ { CMD_OPT_TYPE_STRING, \
+ false, \
+ "pull", \
+ 0, \
+ &(cmdargs).pull, \
+ "Pull image before running (\"always\"|\"missing\"|\"never\") (default \"missing\")", \
+ NULL }, \
{ CMD_OPT_TYPE_CALLBACK, false, "tmpfs", 0, &(cmdargs).custom_conf.tmpfs, "Mount a tmpfs directory", \
command_append_array }, \
{ CMD_OPT_TYPE_BOOL, false, "tty", 't', &(cmdargs).custom_conf.tty, "Allocate a pseudo-TTY", NULL }, \
diff --git a/src/cmd/isula/base/run.c b/src/cmd/isula/base/run.c
index a6068709..53e89c3d 100644
--- a/src/cmd/isula/base/run.c
+++ b/src/cmd/isula/base/run.c
@@ -39,6 +39,7 @@ static int run_checker(struct client_arguments *args);
struct client_arguments g_cmd_run_args = {
.runtime = "",
.restart = "no",
+ .pull = "missing"
};
static int local_cmd_start(const struct client_arguments *args)
diff --git a/src/cmd/isula/client_arguments.h b/src/cmd/isula/client_arguments.h
index adb45104..a155b863 100644
--- a/src/cmd/isula/client_arguments.h
+++ b/src/cmd/isula/client_arguments.h
@@ -307,6 +307,7 @@ struct client_arguments {
// pull/rmi
char *ref;
bool plain_http;
+ char *pull;
// logs
bool follow;
--
2.25.1