aboutsummaryrefslogtreecommitdiff
path: root/docker/base
diff options
context:
space:
mode:
authorRoman Krček <roman.krcek@tietoevry.com>2024-08-21 13:02:19 +0000
committerMichal Arbet <michal.arbet@ultimum.io>2024-12-02 06:54:21 +0100
commitd22245c71125c8c1c053fa772a362f0446467d0b (patch)
tree50043351404dc978a0dbf50a62839aef23a3bd60 /docker/base
parent23519e6d88826cb4f77a3e9b7a21eef02f313ae9 (diff)
downloadkolla-d22245c71125c8c1c053fa772a362f0446467d0b.tar.gz
kolla-d22245c71125c8c1c053fa772a362f0446467d0b.zip
Change copy-cacerts behaviour
So far, the certificates were not part of config.json files for containers. With future patches that will remove container restarts based on triggers from config and service-copy-cert, it is important that all files that change during config are specified in config.json so that kolla-set-configs --check can detect those changes and based on that restart the container. This patch provides prerequisite for future patch in kolla-ansible. Comments from kevko: The script also takes into account whether review [1] is merged or not, ensuring that it will function correctly in both cases thanks to review [2], because using the state file, we can effectively verify whether the config.json that copies CA certs to /var/lib/kolla/share is being used or not. If we didn’t handle it this way, we would have to rely on checking whether the directory /var/lib/kolla/share exists or some another magic, which is insufficient because various states and combinations of Kolla image and Kolla-Ansible versions could result in certificates always being copied. This method provides a clear and definitive distinction. [1] https://review.opendev.org/c/openstack/kolla-ansible/+/924651 [2] https://review.opendev.org/c/openstack/kolla/+/915440 Change-Id: I5120f1874f25a9ca8326e6db8b12dee4c81feb56 Signed-off-by: Roman Krček <roman.krcek@tietoevry.com> Co-Authored-By: Michal Arbet <michal.arbet@ultimum.io> Needed-By: https://review.opendev.org/c/openstack/kolla-ansible/+/924651
Diffstat (limited to 'docker/base')
-rw-r--r--docker/base/copy_cacerts.sh59
1 files changed, 40 insertions, 19 deletions
diff --git a/docker/base/copy_cacerts.sh b/docker/base/copy_cacerts.sh
index 5e8955fed..213033c0c 100644
--- a/docker/base/copy_cacerts.sh
+++ b/docker/base/copy_cacerts.sh
@@ -3,25 +3,46 @@
# Copy custom CA certificates to system trusted CA certificates folder
# and run CA update utility
+if [[ -e "/etc/debian_version" ]]; then
+ ca_dst_path="/usr/local/share/ca-certificates"
+ update_command="update-ca-certificates"
+elif [[ -e "/etc/redhat-release" ]]; then
+ ca_dst_path="/etc/pki/ca-trust/source/anchors"
+ update_command="update-ca-trust"
+else
+ echo "Unsupported OS"
+ exit 1
+fi
+
+# Initialize update_needed variable
+update_needed="false"
+
# Remove old certificates
-rm -f /usr/local/share/ca-certificates/kolla-customca-* \
- /etc/pki/ca-trust/source/anchors/kolla-customca-*
+if find /etc/ssl/certs/ \
+ /usr/local/share/ca-certificates/ \
+ /etc/pki/ca-trust/source/anchors/ \
+ -name 'kolla*' -exec rm -f {} + 2>/dev/null; then
+ update_needed="true"
+fi
+
+# Determine source path for CA certificates
+if grep -q '"source": "/var/lib/kolla/share/ca-certificates"' /etc/kolla/defaults/state; then
+ ca_src_path="/var/lib/kolla/share/ca-certificates"
+else
+ ca_src_path="/var/lib/kolla/config_files/ca-certificates"
+fi
+
+# Check if the source path exists and is not empty
+if [[ -d ${ca_src_path} && $(ls -A "${ca_src_path}" 2>/dev/null) ]]; then
+ # Copy certificates and update CA
+ for cert in "${ca_src_path}"/*; do
+ file=$(basename "${cert}")
+ cp ${cert} ${ca_dst_path}/kolla-customca-${file}
+ update_needed="true"
+ done
+fi
-if [[ -d /var/lib/kolla/config_files/ca-certificates ]] && \
- [[ ! -z "$(ls -A /var/lib/kolla/config_files/ca-certificates/)" ]]; then
- if [[ -e /etc/debian_version ]]; then
- # Debian, Ubuntu
- for cert in /var/lib/kolla/config_files/ca-certificates/*; do
- file=$(basename "$cert")
- cp $cert "/usr/local/share/ca-certificates/kolla-customca-$file"
- done
- update-ca-certificates
- elif [[ -e /etc/redhat-release ]]; then
- # CentOS
- for cert in /var/lib/kolla/config_files/ca-certificates/*; do
- file=$(basename "$cert")
- cp $cert "/etc/pki/ca-trust/source/anchors/kolla-customca-$file"
- done
- update-ca-trust
- fi
+# Run the update command if needed
+if [[ "${update_needed}" == "true" ]]; then
+ ${update_command}
fi