Create Podman DIB Element for container-based cleaning
Create ironic-python-agent-podman. It installs podman and create conf files for podman, ipa, and cleaning steps Add explanation how to configure on README.rst Partial-Bug: #2100556 Change-Id: Id78f0488b4aee34a2682f51d5e647ad81f9e505f
This commit is contained in:
92
dib/element/ironic-python-agent-podman/README.rst
Normal file
92
dib/element/ironic-python-agent-podman/README.rst
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
# ironic-python-agent-podman
|
||||||
|
Adds Podman support and configuration files to ironic-python-agent-ramdisk.
|
||||||
|
|
||||||
|
## Compatibility
|
||||||
|
This DIB element currently supports Debian-based images only. Additional
|
||||||
|
distribution support may be added in the future.
|
||||||
|
|
||||||
|
## ironic-python-agent-config
|
||||||
|
allow_arbitrary_containers:
|
||||||
|
- Description: Defines whether arbitrary containers are allowed.
|
||||||
|
Set to true or false.
|
||||||
|
- Environment Variable: `DIB_ALLOW_ARBITRARY_CONTAINERS`
|
||||||
|
- Default: `false`
|
||||||
|
|
||||||
|
allowed_containers:
|
||||||
|
- Description: Specifies a list of allowed container image URLs
|
||||||
|
(ex "image1-url,image2-url").
|
||||||
|
- Environment Variable: `DIB_ALLOWED_CONTAINERS`
|
||||||
|
- Default: Empty string (`""`)
|
||||||
|
|
||||||
|
container_steps_file:
|
||||||
|
|
||||||
|
- Description: Specifies the path in the ram to the YAML file containing
|
||||||
|
container steps to be executed.
|
||||||
|
- Environment Variable: `DIB_CONTAINER_STEPS_FILE`
|
||||||
|
- Default: `/etc/ironic-python-agent.d/mysteps.yaml`
|
||||||
|
|
||||||
|
runner:
|
||||||
|
|
||||||
|
- Description: Defines the container runtime to use, such as podman or docker.
|
||||||
|
- Environment Variable: `DIB_RUNNER`
|
||||||
|
- Default: `podman`
|
||||||
|
|
||||||
|
pull_options:
|
||||||
|
|
||||||
|
- Description: Container pull options (e.g., --tls-verify=false).
|
||||||
|
- Environment Variable: `DIB_PULL_OPTIONS`
|
||||||
|
- Default: `--tls-verify=false`
|
||||||
|
|
||||||
|
run_options:
|
||||||
|
|
||||||
|
- Description: Options passed when running the container
|
||||||
|
(e.g., --rm --network=host).
|
||||||
|
- Environment Variable: `DIB_RUN_OPTIONS`
|
||||||
|
- Default: `--rm --network=host --tls-verify=false`
|
||||||
|
|
||||||
|
## ironic-python-agent-podman
|
||||||
|
podman_conf_file:
|
||||||
|
- Description: The path to the configuration file created in the RAM
|
||||||
|
- Environment Variable: `DIB_PODMAN_CONF_FILE`
|
||||||
|
- Default `/etc/containers/containers.conf`
|
||||||
|
|
||||||
|
## ironic-python-agent-steps
|
||||||
|
steps_file_path:
|
||||||
|
- Description: Path to the local stepfile to be copied to the RAM
|
||||||
|
- Environment Variable: `DIB_STEPS_FILE_PATH`
|
||||||
|
- Default `/etc/mysteps.yaml`
|
||||||
|
|
||||||
|
### Example mysteps.yaml
|
||||||
|
```
|
||||||
|
steps:
|
||||||
|
- name: manage_container_cleanup
|
||||||
|
image: docker://172.24.4.1:5000/cleaning-image:latest
|
||||||
|
interface: deploy
|
||||||
|
reboot_requested: true
|
||||||
|
pull_options:
|
||||||
|
- --tls-verify=false
|
||||||
|
run_options:
|
||||||
|
- --rm
|
||||||
|
- --network=host
|
||||||
|
- --tls-verify=false
|
||||||
|
abortable: true
|
||||||
|
priority: 20
|
||||||
|
- name: manage_container_cleanup2
|
||||||
|
image: docker://172.24.4.1:5000/cleaning-image2:latest
|
||||||
|
interface: deploy
|
||||||
|
reboot_requested: true
|
||||||
|
pull_options:
|
||||||
|
- --tls-verify=false
|
||||||
|
run_options:
|
||||||
|
- --rm
|
||||||
|
- --network=host
|
||||||
|
- --tls-verify=false
|
||||||
|
abortable: true
|
||||||
|
priority: 10
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
### Customization
|
||||||
|
You can override any of the default values by setting the corresponding
|
||||||
|
environment variables during the build process. This allows the configuration
|
||||||
|
to be dynamically adapted without modifying the script.
|
2
dib/element/ironic-python-agent-podman/element-deps
Normal file
2
dib/element/ironic-python-agent-podman/element-deps
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
ironic-python-agent-ramdisk
|
||||||
|
package-installs
|
@@ -0,0 +1,21 @@
|
|||||||
|
# Podman Config
|
||||||
|
PODMAN_CONF_INSIDEDIR=/etc/containers
|
||||||
|
|
||||||
|
export PODMAN_CONF_FILE=${DIB_IPA_PODMAN_CONF_FILE:-$TMP_BUILD_DIR/mnt/$PODMAN_CONF_INSIDEDIR/containers.conf}
|
||||||
|
|
||||||
|
# Ipa Config
|
||||||
|
IPA_CONF_INSIDEDIR=/etc/ironic-python-agent.d
|
||||||
|
export IPA_CONFFILE=$TMP_BUILD_DIR/mnt/$IPA_CONF_INSIDEDIR/ironic_python_agent.conf
|
||||||
|
|
||||||
|
export ALLOW_ARBITRARY_CONTAINERS="${DIB_ALLOW_ARBITRARY_CONTAINERS:-false}"
|
||||||
|
export ALLOWED_CONTAINERS="${DIB_ALLOWED_CONTAINERS:-""}"
|
||||||
|
export CONTAINER_STEPS_FILE="${DIB_CONTAINER_STEPS_FILE:-/etc/ironic-python-agent.d/mysteps.yaml}"
|
||||||
|
export RUNNER="${DIB_RUNNER:-podman}"
|
||||||
|
export PULL_OPTIONS="${DIB_PULL_OPTIONS:---tls-verify=false}"
|
||||||
|
export RUN_OPTIONS="${DIB_RUN_OPTIONS:---rm --network=host --tls-verify=false}"
|
||||||
|
|
||||||
|
# Steps Config
|
||||||
|
STEPS_INSIDEDIR=/etc/ironic-python-agent.d
|
||||||
|
export STEPS_FILE=$TMP_BUILD_DIR/mnt/$STEPS_INSIDEDIR/mysteps.yaml
|
||||||
|
|
||||||
|
export STEPS_FILE_PATH="${DIB_STEPS_FILE_PATH:-/etc/mysteps.yaml}"
|
@@ -0,0 +1,2 @@
|
|||||||
|
podman:
|
||||||
|
phase: install.d
|
10
dib/element/ironic-python-agent-podman/pre-finalise.d/10-ipa-podman-config
Executable file
10
dib/element/ironic-python-agent-podman/pre-finalise.d/10-ipa-podman-config
Executable file
@@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Ensure the directory exists
|
||||||
|
sudo mkdir -p $(dirname $PODMAN_CONF_FILE)
|
||||||
|
|
||||||
|
# Create Podman configuration file inside the ramdisk with sudo tee
|
||||||
|
echo "[engine]
|
||||||
|
no_pivot_root = true" | sudo tee $PODMAN_CONF_FILE > /dev/null
|
||||||
|
|
||||||
|
echo "Podman configuration written to $PODMAN_CONF_FILE"
|
17
dib/element/ironic-python-agent-podman/pre-finalise.d/20-ipa-config
Executable file
17
dib/element/ironic-python-agent-podman/pre-finalise.d/20-ipa-config
Executable file
@@ -0,0 +1,17 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Ensure the directory exists
|
||||||
|
sudo mkdir -p $(dirname $IPA_CONFFILE)
|
||||||
|
|
||||||
|
# Write the configuration inside the ramdisk
|
||||||
|
cat <<EOF | sudo tee $IPA_CONFFILE
|
||||||
|
[container]
|
||||||
|
allow_arbitrary_containers="$ALLOW_ARBITRARY_CONTAINERS"
|
||||||
|
allowed_containers="$ALLOWED_CONTAINERS"
|
||||||
|
container_steps_file="$CONTAINER_STEPS_FILE"
|
||||||
|
runner="$RUNNER"
|
||||||
|
pull_options="$PULL_OPTIONS"
|
||||||
|
run_options="$RUN_OPTIONS"
|
||||||
|
EOF
|
||||||
|
|
||||||
|
echo "Ironic Python Agent config written to $IPA_CONFFILE"
|
10
dib/element/ironic-python-agent-podman/pre-finalise.d/30-ipa-steps
Executable file
10
dib/element/ironic-python-agent-podman/pre-finalise.d/30-ipa-steps
Executable file
@@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Copy the YAML file to the ramdisk location
|
||||||
|
if [[ -f $STEPS_FILE_PATH ]]; then
|
||||||
|
sudo cp $STEPS_FILE_PATH $STEPS_FILE
|
||||||
|
echo "Local mysteps.yaml copied to ramdisk: $STEPS_FILE"
|
||||||
|
else
|
||||||
|
echo "No valid mysteps.yaml file found at $STEPS_FILE_PATH. Please provide a valid file or check the default path."
|
||||||
|
exit 1
|
||||||
|
fi
|
Reference in New Issue
Block a user