aboutsummaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2023-05-19 11:59:56 +0000
committerGerrit Code Review <review@openstack.org>2023-05-19 11:59:56 +0000
commit62be98f90ccc79da05f8d7ae8003a6538fca93d7 (patch)
tree68727e6a27b4093aa65966a1dfccd759a8863750 /tools
parent10fc1b748aac8fe4157537531f6e34d111bb879c (diff)
parent53e8b80ed36a9193627862427fa224ed38375d3a (diff)
downloadkolla-ansible-62be98f90ccc79da05f8d7ae8003a6538fca93d7.tar.gz
kolla-ansible-62be98f90ccc79da05f8d7ae8003a6538fca93d7.zip
Merge "Add container engine option to scripts"
Diffstat (limited to 'tools')
-rwxr-xr-xtools/cleanup-containers37
-rwxr-xr-xtools/cleanup-images36
-rwxr-xr-xtools/diag18
-rw-r--r--tools/kolla-libvirt-guests-docker.service (renamed from tools/kolla-libvirt-guests.service)0
-rw-r--r--tools/kolla-libvirt-guests-podman.service17
-rwxr-xr-xtools/loc4
-rw-r--r--tools/setup-compute-libvirt.yml2
-rwxr-xr-xtools/validate-all-file.py21
-rwxr-xr-xtools/validate-docker-execute.sh7
9 files changed, 98 insertions, 44 deletions
diff --git a/tools/cleanup-containers b/tools/cleanup-containers
index 493bdcac6..549fa553d 100755
--- a/tools/cleanup-containers
+++ b/tools/cleanup-containers
@@ -1,32 +1,43 @@
#!/usr/bin/env bash
-containers_running=$(sudo docker ps --filter "label=kolla_version" --format "{{.Names}}")
+# default to docker if not specified
+engine="${1:-docker}"
+shift 1
+
+if ! [[ "$engine" =~ ^(docker|podman)$ ]]; then
+ echo "Invalid container engine: ${engine}"
+ exit 1
+fi
+
+echo "Using container engine: $engine"
+
+containers_running=$(sudo $engine ps --filter "label=kolla_version" --format "{{.Names}}")
QEMU_PIDS=$(pgrep -l qemu | awk '!/qemu-ga/ && !/qemu-img/ {print $1}')
if [[ "${containers_running}" =~ "nova_libvirt" ]] && [[ $QEMU_PIDS ]] && [[ $(ps --no-headers wwwup $QEMU_PIDS | grep --invert-match '\-xen\-domid 0') ]]; then
echo "Some qemu processes were detected."
- echo "Docker will not be able to stop the nova_libvirt container with those running."
+ echo "Container engine ($engine) will not be able to stop the nova_libvirt container with those running."
echo "Please clean them up before rerunning this script."
exit 1
-fi
+fi
if [ -n "$1" ]; then
- containers_to_kill=$(sudo docker ps --filter "label=kolla_version" --format "{{.Names}}" -a | grep -E "$1" | awk '{print $1}')
- volumes_to_remove=$(sudo docker inspect -f '{{range .Mounts}} {{printf "%s\n" .Name }}{{end}}' ${containers_to_kill} | \
+ containers_to_kill=$(sudo $engine ps --filter "label=kolla_version" --format "{{.Names}}" -a | grep -E "$1" | awk '{print $1}')
+ volumes_to_remove=$(sudo $engine inspect -f '{{range .Mounts}} {{printf "%s\n" .Name }}{{end}}' ${containers_to_kill} | \
egrep -v '(^\s*$)' | sort | uniq)
else
- containers_to_kill=$(sudo docker ps --filter "label=kolla_version" --format "{{.Names}}" -a)
+ containers_to_kill=$(sudo $engine ps --filter "label=kolla_version" --format "{{.Names}}" -a)
- volumes_to_remove=$(sudo docker inspect -f '{{range .Mounts}} {{printf "%s\n" .Name }}{{end}}' ${containers_to_kill} | \
+ volumes_to_remove=$(sudo $engine inspect -f '{{range .Mounts}} {{printf "%s\n" .Name }}{{end}}' ${containers_to_kill} | \
egrep -v '(^\s*$)' | sort | uniq)
fi
if [[ "${containers_to_kill}" =~ "openvswitch_vswitchd" ]] && [[ "${containers_running}" =~ "neutron_openvswitch_agent" ]]; then
echo "Removing ovs bridge..."
-(sudo docker exec -u root neutron_openvswitch_agent neutron-ovs-cleanup \
+(sudo $engine exec -u root neutron_openvswitch_agent neutron-ovs-cleanup \
--config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/openvswitch_agent.ini \
--ovs_all_ports) > /dev/null
-(sudo docker exec -it openvswitch_vswitchd bash -c 'for br in `ovs-vsctl list-br`;do ovs-vsctl --if-exists del-br $br;done') > /dev/null
+(sudo $engine exec -it openvswitch_vswitchd bash -c 'for br in `ovs-vsctl list-br`;do ovs-vsctl --if-exists del-br $br;done') > /dev/null
fi
echo "Stopping containers..."
@@ -35,15 +46,15 @@ sudo systemctl stop kolla-${container}-container.service
done
echo "Removing containers..."
-(sudo docker rm -v -f ${containers_to_kill} 2>&1) > /dev/null
+(sudo $engine rm -v -f ${containers_to_kill} 2>&1) > /dev/null
-echo "Disconnecting containers from docker host network"
+echo "Disconnecting containers from $engine host network"
for container in ${containers_to_kill}; do
-(sudo docker network disconnect -f host $container 2>&1) > /dev/null
+(sudo $engine network disconnect -f host $container 2>&1) > /dev/null
done
echo "Removing volumes..."
-(sudo docker volume rm ${volumes_to_remove} 2>&1) > /dev/null
+(sudo $engine volume rm ${volumes_to_remove} 2>&1) > /dev/null
echo "Removing link of kolla_log volume..."
(sudo rm -f /var/log/kolla 2>&1) > /dev/null
diff --git a/tools/cleanup-images b/tools/cleanup-images
index 87b2084ac..3d08883c7 100755
--- a/tools/cleanup-images
+++ b/tools/cleanup-images
@@ -1,7 +1,9 @@
#!/usr/bin/env bash
+container_engine="docker"
+
# Move to top level directory
-REAL_PATH=$(python -c "import os;print os.path.realpath('$0')")
+REAL_PATH=$(python3 -c "import os;print(os.path.realpath('$0'))")
cd "$(dirname "$REAL_PATH")/.."
function process_cmd {
@@ -28,34 +30,50 @@ Options:
--help, -h Show this usage information
--image, -i <image> Delete selected images
--image-version <image_version> Set Kolla image version
+ --engine, -e <container_engine> Container engine to be used
EOF
}
-SHORT_OPTS="ahi:"
-LONG_OPTS="all,dangling,help,image:,image-version:"
+SHORT_OPTS="ahi:e:"
+LONG_OPTS="all,dangling,help,image:,image-version:,engine:"
ARGS=$(getopt -o "${SHORT_OPTS}" -l "${LONG_OPTS}" --name "$0" -- "$@") || { usage >&2; exit 2; }
-eval set -- "$ARGS"
+
+for arg do
+ shift
+ if [ "$arg" = "-e" ] || [ "$arg" = "--engine" ]; then
+ container_engine="$1"
+ continue
+ elif [ "$arg" = "$container_engine" ]; then
+ continue
+ fi
+ eval set -- "$@" "$arg"
+done
+
+# catch empty arguments
+if [ "$ARGS" = " --" ]; then
+ eval set -- "$ARGS"
+fi
case "$1" in
(--all|-a)
- KOLLA_IMAGES="$(sudo docker images -a --filter "label=kolla_version" --format "{{.ID}}")"
+ KOLLA_IMAGES="$(sudo ${container_engine} images -a --filter "label=kolla_version" --format "{{.ID}}")"
shift
;;
(--dangling)
- KOLLA_IMAGES="$(sudo docker images -a --filter dangling=true --format "{{.ID}}")"
+ KOLLA_IMAGES="$(sudo ${container_engine} images -a --filter dangling=true --format "{{.ID}}")"
shift
;;
(--image|-i)
- KOLLA_IMAGES="$(sudo docker images -a --filter "label=kolla_version" --format "{{.Repository}}\t{{.ID}}" | grep -E "$2" | awk '{print $2}')"
+ KOLLA_IMAGES="$(sudo ${container_engine} images -a --filter "label=kolla_version" --format "{{.Repository}}\t{{.ID}}" | grep -E "$2" | awk '{print $2}')"
shift 2
;;
(--image-version)
- KOLLA_IMAGES="$(sudo docker images -a --filter "label=kolla_version=${2}" --format "{{.ID}}")"
+ KOLLA_IMAGES="$(sudo ${container_engine} images -a --filter "label=kolla_version=${2}" --format "{{.ID}}")"
shift 2
;;
@@ -73,5 +91,5 @@ case "$1" in
esac
-CMD="sudo docker rmi -f $@ $KOLLA_IMAGES"
+CMD="sudo ${container_engine} rmi -f $@ -- $KOLLA_IMAGES"
process_cmd
diff --git a/tools/diag b/tools/diag
index 2dc5f7880..157747343 100755
--- a/tools/diag
+++ b/tools/diag
@@ -1,13 +1,15 @@
#!/usr/bin/env bash
+container_engine="${1:-docker}"
+
echo "##### System Identification #####"
egrep -w 'PRETTY_NAME|VERSION_ID' /etc/os-release
-echo "##### Docker Version #####"
-docker --version
+echo "##### ${container_engine^} Version #####"
+$container_engine --version
-echo "##### Docker Info #####"
-docker info
+echo "##### ${container_engine^} Info #####"
+$container_engine info
echo "##### Ansible Version #####"
ansible --version
@@ -19,11 +21,11 @@ echo "##### Globals.yml file #####"
egrep -w 'kolla_base_distro|openstack_release' /etc/kolla/globals.yml
cat /etc/kolla/globals.yml | grep ^enable_
-echo "##### Docker Images #####"
-docker images -a --filter "label=kolla_version" --filter "dangling=false" --format "{{.ID}} - {{.Repository}}:{{.Tag}} - {{.CreatedSince}}"
+echo "##### ${container_engine^} Images #####"
+$container_engine images -a --filter "label=kolla_version" --filter "dangling=false" --format "{{.ID}} - {{.Repository}}:{{.Tag}} - {{.CreatedSince}}"
-echo "##### All Docker Containers #####"
-docker ps -a
+echo "##### All ${container_engine^} Containers #####"
+$container_engine ps -a
echo "##### Ip Link Show #####"
ip link show
diff --git a/tools/kolla-libvirt-guests.service b/tools/kolla-libvirt-guests-docker.service
index b43910ce5..b43910ce5 100644
--- a/tools/kolla-libvirt-guests.service
+++ b/tools/kolla-libvirt-guests-docker.service
diff --git a/tools/kolla-libvirt-guests-podman.service b/tools/kolla-libvirt-guests-podman.service
new file mode 100644
index 000000000..d692ab1b9
--- /dev/null
+++ b/tools/kolla-libvirt-guests-podman.service
@@ -0,0 +1,17 @@
+[Unit]
+Description=Manage libvirt guests in kolla safely
+After=systemd-machined.service
+After=virt-guest-shutdown.target
+Requires=virt-guest-shutdown.target
+
+[Install]
+WantedBy=multi-user.target
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+TimeoutStopSec=610
+ExecStart=-/usr/bin/podman exec nova_libvirt /bin/rm -f /var/lib/libvirt/libvirt-guests
+ExecStart=-/usr/bin/podman start nova_compute
+ExecStop=/usr/bin/podman stop nova_compute
+ExecStop=/usr/bin/podman exec nova_libvirt /bin/sh -x /usr/libexec/libvirt-guests.sh shutdown
diff --git a/tools/loc b/tools/loc
index 5abecbc97..1cd34ecdf 100755
--- a/tools/loc
+++ b/tools/loc
@@ -2,6 +2,7 @@
ANSIBLE=`find ansible -type f -exec cat {} \; | wc -l`
DOCKER=`find docker -type f -exec cat {} \; | wc -l`
+PODMAN=`find podman -type f -exec cat {} \; | wc -l`
DOC=`find doc -type f -exec cat {} \; | wc -l`
TESTS=`find tests -type f -exec cat {} \; | wc -l`
BUILD=`find kolla -type f -exec cat {} \; | wc -l`
@@ -12,7 +13,7 @@ ETC=`find etc -type f -exec cat {} \; | wc -l`
TOOLS=`find tools -type f -exec cat {} \; | wc -l`
VAGRANT=`find contrib/dev/vagrant -type f -exec cat {} \; | wc -l`
-CORE=$(($ANSIBLE+$DOCKER+$TESTS+$DOCS+$BUILD))
+CORE=$(($ANSIBLE+$DOCKER+$PODMAN+$TESTS+$DOCS+$BUILD))
SUPP=$(($DEMOS+$HEAT+$SPECS+$ETC+$TOOLS+$VAGRANT))
TOTAL=$(($CORE+$SUPP))
@@ -23,6 +24,7 @@ echo "Demos $DEMOS"
echo "Doc $DOC"
echo "Etc $ETC"
echo "Docker $DOCKER"
+echo "Podman $PODMAN"
echo "Specs $SPECS"
echo "Tests $TESTS"
echo "Tools $TOOLS"
diff --git a/tools/setup-compute-libvirt.yml b/tools/setup-compute-libvirt.yml
index 8c3f46a54..9df033bec 100644
--- a/tools/setup-compute-libvirt.yml
+++ b/tools/setup-compute-libvirt.yml
@@ -7,7 +7,7 @@
become: true
vars:
systemd_artifacts:
- - kolla-libvirt-guests.service
+ - "kolla-libvirt-guests-{{ container_engine }}.service"
- virt-guest-shutdown.target
tasks:
- name: Install systemd artifacts
diff --git a/tools/validate-all-file.py b/tools/validate-all-file.py
index 777c47b09..33d3032bf 100755
--- a/tools/validate-all-file.py
+++ b/tools/validate-all-file.py
@@ -154,7 +154,7 @@ def check_docker_become():
for x in YAML_INCLUDE_PATTERNS])
excludes = r'|'.join([fnmatch.translate(x)
for x in YAML_EXCLUDE_PATTERNS])
- docker_modules = ('kolla_docker', 'kolla_container_facts', 'kolla_toolbox')
+ ce_modules = ('kolla_docker', 'kolla_container_facts', 'kolla_toolbox')
cmd_modules = ('command', 'shell')
return_code = 0
roles_path = os.path.join(PROJECT_ROOT, 'ansible', 'roles')
@@ -168,24 +168,27 @@ def check_docker_become():
tasks = yaml.safe_load(fp)
tasks = tasks or []
for task in tasks:
- for module in docker_modules:
+ for module in ce_modules:
if module in task and not task.get('become'):
return_code = 1
LOG.error("Use of %s module without become in "
"task %s in %s",
module, task['name'], fullpath)
for module in cmd_modules:
- docker_without_become = False
+ ce_without_become = False
if (module in task and not task.get('become')):
if (isinstance(task[module], str) and
- (task[module]).startswith('docker')):
- docker_without_become = True
+ ((task[module]).startswith('docker') or
+ (task[module]).startswith('podman'))):
+ ce_without_become = True
if (isinstance(task[module], dict) and
- task[module]['cmd'].startswith('docker')):
- docker_without_become = True
- if docker_without_become:
+ (task[module]['cmd'].startswith('docker') or
+ task[module]['cmd'].startswith('podman'))):
+ ce_without_become = True
+ if ce_without_become:
return_code = 1
- LOG.error("Use of docker in %s module without "
+ LOG.error("Use of container engine in %s "
+ "module without "
"become in task %s in %s",
module, task['name'], fullpath)
diff --git a/tools/validate-docker-execute.sh b/tools/validate-docker-execute.sh
index 4db81e1e2..cca6589dd 100755
--- a/tools/validate-docker-execute.sh
+++ b/tools/validate-docker-execute.sh
@@ -1,13 +1,14 @@
#!/usr/bin/env bash
#
# This script can be used to check user privilege to execute
-# docker commands
+# docker or podman commands depending on CONTAINER_ENGINE
+# environment variable
function check_dockerexecute {
- sudo docker ps &>/dev/null
+ sudo $CONTAINER_ENGINE ps &>/dev/null
return_val=$?
if [ $return_val -ne 0 ]; then
- echo "User $USER can't seem to run Docker commands. Verify product documentation to allow user to execute docker commands" 1>&2
+ echo "User $USER can't seem to run ${CONTAINER_ENGINE^} commands. Verify product documentation to allow user to execute ${CONTAINER_ENGINE^} commands" 1>&2
exit 1
fi
}