diff --git a/board/common/rootfs/usr/sbin/container b/board/common/rootfs/usr/sbin/container
index 12c836b0..23521d65 100755
--- a/board/common/rootfs/usr/sbin/container
+++ b/board/common/rootfs/usr/sbin/container
@@ -246,6 +246,17 @@ case $cmd in
stop)
initctl -bq stop "container:$1" || podman kill "$1"
;;
+ upgrade)
+ img=$(podman inspect "$1" | jq -r .[].ImageName)
+ if [ -z "$img" ]; then
+ echo "No such container ($1), or invalid ImageName. Cannot upgrade."
+ exit 1;
+ fi
+ podman stop "$1"
+ podman pull "$img" || (echo "Failed fetching $img, check your network (settings)."; exit 1)
+ "/var/lib/containers/active/${1}.sh" || (echo "Failed recreating container $1"; exit 1)
+ echo "Container $1 recreated, restart with 'container start $1'"
+ ;;
volume)
cmd=$1
shift
diff --git a/package/execd/execd.conf b/package/execd/execd.conf
index cd9c0176..54978b51 100644
--- a/package/execd/execd.conf
+++ b/package/execd/execd.conf
@@ -1,2 +1,2 @@
service log:prio:local1.err,tag:container \
- [2345] execd /run/containers/queue /var/lib/containers/done -- Container job runner
+ [2345] execd /run/containers/queue /var/lib/containers/active -- Container job runner
diff --git a/package/execd/tmpfiles.conf b/package/execd/tmpfiles.conf
index 1cf96006..0f2b116a 100644
--- a/package/execd/tmpfiles.conf
+++ b/package/execd/tmpfiles.conf
@@ -1,5 +1,5 @@
d /run/containers/args 0700 - -
-d /var/lib/containers/done 0700 - -
+d /var/lib/containers/active 0700 - -
d /run/containers/inbox 0700 - -
d /run/containers/queue 0700 - -
d /run/cni 0755 - -
diff --git a/src/confd/src/infix-containers.c b/src/confd/src/infix-containers.c
index 95f8a022..6e9dbdfa 100644
--- a/src/confd/src/infix-containers.c
+++ b/src/confd/src/infix-containers.c
@@ -19,7 +19,7 @@
#define CFG_XPATH "/infix-containers:container"
#define INBOX_QUEUE "/run/containers/inbox"
#define JOB_QUEUE "/run/containers/queue"
-#define DONE_QUEUE "/var/lib/containers/done"
+#define ACTIVE_QUEUE "/var/lib/containers/active"
#define LOGGER "logger -t container -p local1.notice"
static const struct srx_module_requirement reqs[] = {
@@ -231,13 +231,13 @@ void infix_containers_launch(void)
}
while ((d = readdir(dir))) {
+ char curr[strlen(ACTIVE_QUEUE) + strlen(d->d_name) + 2];
char next[strlen(INBOX_QUEUE) + strlen(d->d_name) + 2];
- char curr[strlen(DONE_QUEUE) + strlen(d->d_name) + 2];
+ snprintf(curr, sizeof(curr), "%s/%s", ACTIVE_QUEUE, d->d_name);
snprintf(next, sizeof(next), "%s/%s", INBOX_QUEUE, d->d_name);
- snprintf(curr, sizeof(curr), "%s/%s", DONE_QUEUE, d->d_name);
if (!systemf("cmp %s %s", curr, next)) {
- ERRNO("New job %s is already done, no changes, skipping.", next);
+ ERRNO("New job %s is already active, no changes, skipping.", next);
systemf("initctl -nbq cond set container:$(basename %s .sh)", d->d_name);
remove(next);
continue;
diff --git a/src/klish-plugin-infix/xml/infix.xml b/src/klish-plugin-infix/xml/infix.xml
index c74abe7d..f7b1b45b 100644
--- a/src/klish-plugin-infix/xml/infix.xml
+++ b/src/klish-plugin-infix/xml/infix.xml
@@ -245,6 +245,13 @@
container stop $KLISH_PARAM_name
+
+
+
+
+ container upgrade $KLISH_PARAM_name
+
+