117 lines
5.4 KiB
Diff
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
|
|
|