Merge pull request #1386 from kernelkit/container-restart-on-env

Container restart on env
This commit is contained in:
Joachim Wiberg
2026-02-02 09:16:35 +01:00
committed by GitHub
7 changed files with 50 additions and 7 deletions
+18 -3
View File
@@ -63,6 +63,21 @@ calc_sha()
sha256sum "$1" 2>/dev/null | awk '{print $1}'
}
# Calculate a combined SHA256 over the container script and its
# optional env file. Environment variables are stored separately
# from the script, so both must be included in the checksum to
# detect configuration changes such as added/changed env vars.
calc_config_sha()
{
_envfile="/run/containers/args/${name}.env"
if [ -f "$_envfile" ]; then
cat "$1" "$_envfile" | sha256sum | awk '{print $1}'
else
calc_sha "$1"
fi
}
# Check image transport, return 0 if remote, 1 if local
is_remote()
{
@@ -124,7 +139,7 @@ is_uptodate()
# If SHA matches, check container instance
if [ "$stored_sha" = "$current_sha" ]; then
if podman container exists "$name"; then
config_sha=$(calc_sha "$script")
config_sha=$(calc_config_sha "$script")
container_sha=$(podman inspect "$name" --format '{{index .Config.Labels "config-sha256"}}' 2>/dev/null)
container_img_sha=$(podman inspect "$name" --format '{{index .Config.Labels "meta-image-sha256"}}' 2>/dev/null)
@@ -143,7 +158,7 @@ is_uptodate()
else
# Remote image optimization: check config-sha256 only
if podman container exists "$name"; then
config_sha=$(calc_sha "$script")
config_sha=$(calc_config_sha "$script")
container_sha=$(podman inspect "$name" --format '{{index .Config.Labels "config-sha256"}}' 2>/dev/null)
if [ "$container_sha" = "$config_sha" ]; then
@@ -459,7 +474,7 @@ create()
fi
# Add config checksum label
args="$args --label config-sha256=$(calc_sha "$script")"
args="$args --label config-sha256=$(calc_config_sha "$script")"
fi
# shellcheck disable=SC2048
+1
View File
@@ -71,6 +71,7 @@ Noteworthy changes and additions in this release are marked below in bold text.
similar to IPv4, correctly mapping to the ietf-ip.yang model semantics
- Fix #1082: Wi-Fi interfaces always scanned, introduce a `scan-mode` to the
Wi-Fi concept in Infix
- Fix #1313: Container is not restarted if environment variable is changed
- Fix #1314: Raspberry Pi 4B with 1 or 8 GiB RAM does not boot. This was due
newer EEPROM firmware in newer boards require a newer rpi-firmware package
- Fix #1345: firewall not updating when interfaces become bridge/lag ports
+1
View File
@@ -31,6 +31,7 @@ CLI has several keybindings, most significant first:
| Ctrl-q | Ctrl-v | Insert next character literally |
| Ctrl-r | | History, reversed interactive search (i-search) |
| Ctrl-t | | Transpose/Swap characters before and at cursor |
| Meta-# | Alt-Shift-3 | Prepend # to current line and submit to history |
## What is Meta?
+1 -1
View File
@@ -1,3 +1,3 @@
# Locally calculated
sha256 9d9d33b873917ca5d0bdcc47a36d2fd385971ab0c045d1472fcadf95ee5bcf5b LICENCE
sha256 39a73fdaa7e41001e804e2bbdebdc885da79d540f0246777e8fd1c0dd9fc9475 klish-1c31f50ab775d467fa18f2e0a798006949536a2a-git4.tar.gz
sha256 cd9bc969350b8b30d9a7a31b0f19fb3218c602f04fe7e6a1d80682a75ed26d18 klish-3ae496c43d90354ffa94d364d7775c089f0e119a-git4.tar.gz
+1 -1
View File
@@ -4,7 +4,7 @@
#
################################################################################
KLISH_VERSION = 1c31f50ab775d467fa18f2e0a798006949536a2a
KLISH_VERSION = 3ae496c43d90354ffa94d364d7775c089f0e119a
KLISH_SITE = https://github.com/kernelkit/klish.git
#KLISH_VERSION = tags/3.0.0
#KLISH_SITE = https://src.libcode.org/pkun/klish.git
+5 -1
View File
@@ -5,11 +5,13 @@ ifdef::topdoc[:imagesdir: {topdoc}../../test/case/containers/environment]
==== Description
Verify that environment variables can be set in container configuration
and are available inside the running container.
and are available inside the running container. Also verify that
changing an environment variable triggers a container restart.
1 Set up a container config with multiple environment variables
2. Serve variables back to host using a CGI script in container
3. Verify served content against environment variables
4. Change an environment variable and verify the container restarts
==== Topology
@@ -23,5 +25,7 @@ image::topology.svg[Container environment variables topology, align=center, scal
. Verify container has started
. Verify basic connectivity to data interface
. Verify environment variables in CGI response
. Change environment variable and verify container restarts
. Verify container has restarted with updated env
+23 -1
View File
@@ -3,11 +3,13 @@
Container environment variables
Verify that environment variables can be set in container configuration
and are available inside the running container.
and are available inside the running container. Also verify that
changing an environment variable triggers a container restart.
1 Set up a container config with multiple environment variables
2. Serve variables back to host using a CGI script in container
3. Verify served content against environment variables
4. Change an environment variable and verify the container restarts
"""
import infamy
from infamy.util import until, to_binary, curl
@@ -105,4 +107,24 @@ with infamy.Test() as test:
until(lambda: all(string in ns.call(lambda: curl(URL)) for string in expected_strings))
with test.step("Change environment variable and verify container restarts"):
UPDATED_ENV_VARS = [
{"key": "TEST_VAR", "value": "updated-value"},
{"key": "APP_PORT", "value": "8080"},
{"key": "DEBUG_MODE", "value": "true"},
{"key": "PATH_WITH_SPACES", "value": "/path with spaces/test"}
]
target.put_config_dict("infix-containers", {
"containers": {
"container": [{
"name": f"{NAME}",
"env": UPDATED_ENV_VARS,
}]
}
})
with test.step("Verify container has restarted with updated env"):
until(lambda: "TEST_VAR=updated-value" in ns.call(lambda: curl(URL)), attempts=60)
test.succeed()