SHELL:=/bin/bash
-BMDIR:=$(CURDIR)/env/metal3
-KUD_PATH:=$(CURDIR)/deploy/kud
-SDWAN_VERIFIER_PATH:=$(CURDIR)/sdwan/test
-BOOTLOADER_ENV:=$(CURDIR)/env/ubuntu/bootloader-env
help:
@echo " Targets:"
- @echo " test -- run unit tests"
@echo " jump_server -- install jump server into this machine"
- @echo " cluster -- provision cluster(s)"
- @echo " verifier -- run verifier tests for CI & CD logs"
@echo " unit -- run the unit tests"
+ @echo " verifier -- run verifier tests for CI & CD logs"
+ @echo " vm_cluster -- deploy VM compute cluster"
+ @echo " pod11_cluster -- deploy pod11 compute cluster"
@echo " help -- this help output"
install: jump_server
-jump_server: package_prerequisite \
- kud_bm_deploy_mini \
- bmo_install \
- capi_install \
- flux_install
+# The jump server
-clean_jump_server: bmo_clean_host \
- kud_bm_reset \
- clean_packages
+jump_server: management_cluster \
+ tools \
+ ironic_bridge \
+ controllers
-package_prerequisite:
- pushd $(BMDIR) && ./01_install_package.sh && popd
+jump_server_clean: ironic_bridge_clean \
+ management_cluster_clean
-bmo_clean:
- ./deploy/baremetal-operator/baremetal-operator.sh clean
+# The jump server requires a K8s cluster to install into
+
+management_cluster:
+ source user_config.sh && \
+ ./deploy/kud/kud_bm_launch.sh minimal
+
+management_cluster_clean:
+ ./deploy/kud/kud_bm_launch.sh reset
+
+# Tools used during the installation of jump server components
+
+tools: kustomize \
+ clusterctl \
+ flux_cli \
+ sops \
+ emcoctl
+
+kustomize:
+ ./deploy/kustomize/kustomize.sh deploy
+
+clusterctl:
+ ./deploy/clusterctl/clusterctl.sh deploy
+
+flux_cli:
+ ./deploy/flux-cli/flux-cli.sh deploy
+
+sops:
+ ./deploy/sops/sops.sh deploy
-bmo_clean_host:
- pushd $(BMDIR) && ./06_host_cleanup.sh && popd
+emcoctl: golang
+ ./deploy/emcoctl/emcoctl.sh deploy
-clean_packages:
- pushd $(BOOTLOADER_ENV) && \
- ./02_clean_bootloader_package_req.sh --only-packages && popd
+golang:
+ ./deploy/golang/golang.sh deploy
-bmo_install:
+# Provisioning network configuration in the jump server
+
+ironic_bridge:
source user_config.sh && env && \
- pushd $(BMDIR) && ./02_configure.sh && popd && \
- ./deploy/ironic/ironic.sh deploy && \
- ./deploy/cert-manager/cert-manager.sh deploy && \
+ ./deploy/ironic/ironic.sh deploy-bridge
+
+ironic_bridge_clean:
+ ./deploy/ironic/ironic.sh clean-bridge
+
+# Jump server components
+
+controllers: baremetal_operator \
+ cluster_api \
+ flux
+
+baremetal_operator: ironic cert_manager
./deploy/baremetal-operator/baremetal-operator.sh deploy
-kud_bm_deploy_mini:
- source user_config.sh && \
- pushd $(KUD_PATH) && ./kud_bm_launch.sh minimal && popd
+baremetal_operator_clean:
+ ./deploy/baremetal-operator/baremetal-operator.sh clean
-kud_bm_reset:
- pushd $(KUD_PATH) && ./kud_bm_launch.sh reset && popd
+ironic:
+ ./deploy/ironic/ironic.sh deploy
-sdwan_verifier:
- pushd $(SDWAN_VERIFIER_PATH) && bash sdwan_verifier.sh && popd
+cert_manager:
+ ./deploy/cert-manager/cert-manager.sh deploy
-capi_install:
+cluster_api:
./deploy/cluster-api/cluster-api.sh deploy
-flux_install:
+flux:
./deploy/flux/flux.sh deploy
-unit: bashate
-
-bashate:
- bashate -i E006,E003,E002,E010,E011,E042,E043 `find . -type f -not -path './cmd/bpa-operator/vendor/*' -not -path './ci/jjb/shell/*' -name "*.sh"`
-
-bm_verifer: jump_server \
- pod11_cluster \
- pod11_clean_cluster \
- clean_jump_server
+# Example compute clusters
pod11_cluster:
./deploy/site/pod11/pod11.sh deploy
./deploy/kata/kata.sh test
./deploy/addons/addons.sh test
-pod11_clean_cluster:
+pod11_cluster_clean:
./deploy/site/pod11/pod11.sh clean
-verifier: vm_verifier
-
-vm_verifier: jump_server \
- vm_cluster \
- vm_clean_cluster \
- clean_jump_server
-
vm_cluster:
./deploy/site/vm/vm.sh deploy
./deploy/site/vm/vm.sh wait
./deploy/kata/kata.sh test
./deploy/addons/addons.sh test
-vm_clean_cluster:
+vm_cluster_clean:
./deploy/site/vm/vm.sh clean
-.PHONY: all bashate
+# Test targets
+
+unit: bashate
+
+bashate:
+ bashate -i E006,E003,E002,E010,E011,E042,E043 `find . -type f -not -path './ci/jjb/shell/*' -not -path './build/*' -name "*.sh"`
+
+verifier: vm_verifier
+
+vm_verifier: jump_server \
+ vm_cluster \
+ vm_cluster_clean \
+ jump_server_clean
+
+bm_verifer: jump_server \
+ pod11_cluster \
+ pod11_cluster_clean \
+ jump_server_clean
+
+SDWAN_VERIFIER_PATH:=$(CURDIR)/sdwan/test
+sdwan_verifier:
+ pushd $(SDWAN_VERIFIER_PATH) && bash sdwan_verifier.sh && popd
BUILDDIR=${SCRIPTDIR/deploy/build}
mkdir -p ${BUILDDIR}
+function install_deps {
+ apt-get install -y jq
+}
+
function is_emco_ready {
local -r cluster_name=${CLUSTER_NAME:-icn}
local -r cluster_kubeconfig="${BUILDDIR}/${cluster_name}.conf"
}
function test_addons {
+ install_deps
+
# Create a temporary kubeconfig file for the tests
local -r cluster_name=${CLUSTER_NAME:-icn}
local -r cluster_kubeconfig="${BUILDDIR}/${cluster_name}.conf"
--- /dev/null
+#!/usr/bin/env bash
+set -eux -o pipefail
+
+SCRIPTDIR="$(readlink -f $(dirname ${BASH_SOURCE[0]}))"
+LIBDIR="$(dirname $(dirname ${SCRIPTDIR}))/env/lib"
+
+source $LIBDIR/common.sh
+
+function deploy {
+ curl -L https://github.com/kubernetes-sigs/cluster-api/releases/download/${CAPI_VERSION}/clusterctl-linux-amd64 -o clusterctl
+ sudo install -o root -g root -m 0755 clusterctl /usr/local/bin/clusterctl
+ rm clusterctl
+ clusterctl version
+}
+
+case $1 in
+ "deploy") deploy ;;
+ *) cat <<EOF
+Usage: $(basename $0) COMMAND
+
+Commands:
+ deploy - Deploy clusterctl
+EOF
+ ;;
+esac
--- /dev/null
+#!/usr/bin/env bash
+set -eux -o pipefail
+
+SCRIPTDIR="$(readlink -f $(dirname ${BASH_SOURCE[0]}))"
+LIBDIR="$(dirname $(dirname ${SCRIPTDIR}))/env/lib"
+
+source $LIBDIR/common.sh
+
+function deploy {
+ clone_emco_repository
+ make -C ${EMCOPATH}/src/tools/emcoctl
+ sudo install -o root -g root -m 0755 ${EMCOPATH}/bin/emcoctl/emcoctl /usr/local/bin/emcoctl
+}
+
+case $1 in
+ "deploy") deploy ;;
+ *) cat <<EOF
+Usage: $(basename $0) COMMAND
+
+Commands:
+ deploy - Deploy emcoctl
+EOF
+ ;;
+esac
--- /dev/null
+#!/usr/bin/env bash
+set -eux -o pipefail
+
+SCRIPTDIR="$(readlink -f $(dirname ${BASH_SOURCE[0]}))"
+LIBDIR="$(dirname $(dirname ${SCRIPTDIR}))/env/lib"
+
+source $LIBDIR/common.sh
+
+function deploy {
+ export FLUX_VERSION
+ curl -s https://fluxcd.io/install.sh | sudo -E bash
+ flux --version
+}
+
+case $1 in
+ "deploy") deploy ;;
+ *) cat <<EOF
+Usage: $(basename $0) COMMAND
+
+Commands:
+ deploy - Deploy Flux CLI
+EOF
+ ;;
+esac
--- /dev/null
+#!/usr/bin/env bash
+set -eux -o pipefail
+
+SCRIPTDIR="$(readlink -f $(dirname ${BASH_SOURCE[0]}))"
+LIBDIR="$(dirname $(dirname ${SCRIPTDIR}))/env/lib"
+
+source $LIBDIR/common.sh
+
+function deploy {
+ add-apt-repository -y ppa:longsleep/golang-backports
+ apt-get update
+ apt-get install golang-go -y
+}
+
+case $1 in
+ "deploy") deploy ;;
+ *) cat <<EOF
+Usage: $(basename $0) COMMAND
+
+Commands:
+ deploy - Deploy golang
+EOF
+ ;;
+esac
kubectl get all -n ${NAMEPREFIX}-system
}
+function check_interface_ip {
+ local -r interface=$1
+ local -r ipaddr=$2
+
+ ip addr show dev ${interface}
+ if [[ $? -ne 0 ]]; then
+ exit 1
+ fi
+
+ local -r ipv4address=$(ip addr show dev ${interface} | awk '$1 == "inet" { sub("/.*", "", $2); print $2 }')
+ if [[ "$ipv4address" != "$ipaddr" ]]; then
+ exit 1
+ fi
+}
+
+function configure_ironic_bridge {
+ if [[ ! $(ip link show dev provisioning) ]]; then
+ ip link add dev provisioning type bridge
+ fi
+ ip link set provisioning up
+ ip link set dev ${IRONIC_INTERFACE} master provisioning
+ if [[ ! $(ip addr show dev provisioning to 172.22.0.1) ]]; then
+ ip addr add dev provisioning 172.22.0.1/24
+ fi
+}
+
+function configure_ironic_interfaces {
+ # Add firewall rules to ensure the IPA ramdisk can reach httpd,
+ # Ironic and the Inspector API on the host
+ if [ "${IRONIC_PROVISIONING_INTERFACE}" ]; then
+ check_interface_ip ${IRONIC_PROVISIONING_INTERFACE} ${IRONIC_PROVISIONING_INTERFACE_IP}
+ else
+ exit 1
+ fi
+
+ for port in 80 5050 6385 ; do
+ if ! sudo iptables -C INPUT -i ${IRONIC_PROVISIONING_INTERFACE} -p tcp -m tcp --dport ${port} -j ACCEPT > /dev/null 2>&1; then
+ sudo iptables -I INPUT -i ${IRONIC_PROVISIONING_INTERFACE} -p tcp -m tcp --dport ${port} -j ACCEPT
+ fi
+ done
+
+ # Allow access to dhcp and tftp server for pxeboot
+ for port in 67 69 ; do
+ if ! sudo iptables -C INPUT -i ${IRONIC_PROVISIONING_INTERFACE} -p udp --dport ${port} -j ACCEPT 2>/dev/null ; then
+ sudo iptables -I INPUT -i ${IRONIC_PROVISIONING_INTERFACE} -p udp --dport ${port} -j ACCEPT
+ fi
+ done
+}
+
+function deploy_bridge {
+ configure_ironic_bridge
+ configure_ironic_interfaces
+}
+
+function clean_bridge {
+ ip link set provisioning down || true
+ ip link del provisioning type bridge || true
+}
+
# This may be used to update the in-place Ironic YAML files from the
# upstream project. We cannot use the upstream sources directly as
# they require an envsubst step before kustomize build.
function clean {
kustomize build ${SCRIPTDIR}/icn | kubectl delete -f -
+ rm -rf ${IRONIC_DATA_DIR}
}
case $1 in
"build-source") build_source ;;
"clean") clean ;;
+ "clean-bridge") clean_bridge ;;
"deploy") deploy ;;
+ "deploy-bridge") deploy_bridge ;;
*) cat <<EOF
Usage: $(basename $0) COMMAND
Commands:
build-source - Rebuild the in-tree Ironic YAML files
clean - Remove Ironic
+ clean-bridge - Uninstall provisioning network bridge
deploy - Deploy Ironic
+ deploy-bridge - Install provisioning network bridge
EOF
;;
esac
#!/usr/bin/env bash
set -eu -o pipefail
-LIBDIR="$(dirname "$(dirname "$PWD")")"
+SCRIPTDIR="$(readlink -f $(dirname ${BASH_SOURCE[0]}))"
+LIBDIR="$(dirname $(dirname ${SCRIPTDIR}))/env/lib"
-source $LIBDIR/env/lib/common.sh
+source $LIBDIR/common.sh
export KUBESPRAY_VERSION=2.16.0
--- /dev/null
+#!/usr/bin/env bash
+set -eux -o pipefail
+
+SCRIPTDIR="$(readlink -f $(dirname ${BASH_SOURCE[0]}))"
+LIBDIR="$(dirname $(dirname ${SCRIPTDIR}))/env/lib"
+
+source $LIBDIR/common.sh
+
+function deploy {
+ curl -sL "https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize%2F${KUSTOMIZE_VERSION}/kustomize_${KUSTOMIZE_VERSION}_linux_amd64.tar.gz" -o kustomize_${KUSTOMIZE_VERSION}_linux_amd64.tar.gz
+ tar xzf kustomize_${KUSTOMIZE_VERSION}_linux_amd64.tar.gz --no-same-owner
+ sudo install -o root -g root -m 0755 kustomize /usr/local/bin/kustomize
+ rm kustomize_${KUSTOMIZE_VERSION}_linux_amd64.tar.gz kustomize
+ kustomize version
+}
+
+case $1 in
+ "deploy") deploy ;;
+ *) cat <<EOF
+Usage: $(basename $0) COMMAND
+
+Commands:
+ deploy - Deploy kustomize
+EOF
+ ;;
+esac
# This enables logging into the control plane machines from this
# machine without specifying the identify file on the command line
+ if [[ ! $(which ipcalc) ]]; then
+ apt-get install -y ipcalc
+ fi
+
# Create ssh config if it doesn't exist
mkdir -p ${HOME}/.ssh && chmod 700 ${HOME}/.ssh
touch ${HOME}/.ssh/config
--- /dev/null
+#!/usr/bin/env bash
+set -eux -o pipefail
+
+SCRIPTDIR="$(readlink -f $(dirname ${BASH_SOURCE[0]}))"
+LIBDIR="$(dirname $(dirname ${SCRIPTDIR}))/env/lib"
+
+source $LIBDIR/common.sh
+
+function deploy {
+ curl -L https://github.com/mozilla/sops/releases/download/${SOPS_VERSION}/sops-${SOPS_VERSION}.linux -o sops
+ sudo install -o root -g root -m 0755 sops /usr/local/bin/sops
+ rm sops
+ sops --version
+}
+
+case $1 in
+ "deploy") deploy ;;
+ *) cat <<EOF
+Usage: $(basename $0) COMMAND
+
+Commands:
+ deploy - Deploy SOPS
+EOF
+ ;;
+esac
clone_repository ${EMCOPATH} ${EMCOREPO} ${EMCO_VERSION}
}
-function install_kustomize {
- curl -sL "https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize%2F${KUSTOMIZE_VERSION}/kustomize_${KUSTOMIZE_VERSION}_linux_amd64.tar.gz" -o kustomize_${KUSTOMIZE_VERSION}_linux_amd64.tar.gz
- tar xzf kustomize_${KUSTOMIZE_VERSION}_linux_amd64.tar.gz --no-same-owner
- sudo install -o root -g root -m 0755 kustomize /usr/local/bin/kustomize
- rm kustomize_${KUSTOMIZE_VERSION}_linux_amd64.tar.gz kustomize
- kustomize version
-}
-
-function install_clusterctl {
- curl -L https://github.com/kubernetes-sigs/cluster-api/releases/download/${CAPI_VERSION}/clusterctl-linux-amd64 -o clusterctl
- sudo install -o root -g root -m 0755 clusterctl /usr/local/bin/clusterctl
- rm clusterctl
- clusterctl version
-}
-
-function install_flux_cli {
- export FLUX_VERSION
- curl -s https://fluxcd.io/install.sh | sudo -E bash
- flux --version
-}
-
-function install_emcoctl {
- clone_emco_repository
- make -C ${EMCOPATH}/src/tools/emcoctl
- sudo install -o root -g root -m 0755 ${EMCOPATH}/bin/emcoctl/emcoctl /usr/local/bin/emcoctl
-}
-
-function install_sops {
- curl -L https://github.com/mozilla/sops/releases/download/${SOPS_VERSION}/sops-${SOPS_VERSION}.linux -o sops
- sudo install -o root -g root -m 0755 sops /usr/local/bin/sops
- rm sops
- sops --version
-}
-
function fetch_image {
if [[ "${BM_IMAGE_URL}" && "${BM_IMAGE}" ]]; then
mkdir -p "${IRONIC_DATA_DIR}/html/images"
+++ /dev/null
-#!/usr/bin/env bash
-set -eux -o pipefail
-
-LIBDIR="$(dirname "$PWD")"
-
-source $LIBDIR/lib/common.sh
-source $LIBDIR/lib/logging.sh
-
-if [[ $EUID -ne 0 ]]; then
- echo "This script must be run as root"
- exit 1
-fi
-
-function install_essential_packages {
- export DEBIAN_FRONTEND=noninteractive
- apt-get update
- apt-get -y install \
- ca-certificates \
- crudini \
- curl \
- figlet \
- ipcalc \
- nmap \
- patch \
- psmisc \
- python3-pip \
- python3-requests \
- python3-setuptools \
- vim \
- wget \
- git \
- software-properties-common
-
- update-alternatives --install /usr/bin/python python /usr/bin/python3 1
- update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1
-
- add-apt-repository -y ppa:longsleep/golang-backports
- apt-get update
- apt-get install golang-go -y
-}
-
-function install_ironic_packages {
- apt-get update
- apt-get -y install \
- jq \
- nodejs \
- python3-ironicclient \
- python3-ironic-inspector-client \
- python3-lxml \
- python3-netaddr \
- python3-openstackclient \
- unzip \
- genisoimage \
- whois
-
- pip install \
- lolcat \
- yq
-}
-
-install() {
- install_essential_packages
- install_ironic_packages
- install_kustomize
- install_clusterctl
- install_flux_cli
- install_sops
- install_emcoctl
-}
-
-install
+++ /dev/null
-#!/usr/bin/env bash
-set -eux -o pipefail
-
-SCRIPTDIR="$(readlink -f $(dirname ${BASH_SOURCE[0]}))"
-LIBDIR="$(dirname ${SCRIPTDIR})/lib"
-
-source $LIBDIR/logging.sh
-source $LIBDIR/common.sh
-
-if [[ $EUID -ne 0 ]]; then
- echo "confgiure script must be run as root"
- exit 1
-fi
-
-function check_interface_ip {
- local interface=$1
- local ipaddr=$2
-
- ip addr show dev $interface
- if [ $? -ne 0 ]; then
- exit 1
- fi
-
- local ipv4address=$(ip addr show dev $interface | awk '$1 == "inet" { sub("/.*", "", $2); print $2 }')
- if [ "$ipv4address" != "$ipaddr" ]; then
- exit 1
- fi
-}
-
-function configure_ironic_bridge {
- ip link add dev provisioning type bridge
- ip link set provisioning up
- ip link set dev $IRONIC_INTERFACE master provisioning
- ip addr add dev provisioning 172.22.0.1/24
-}
-
-function configure_ironic_interfaces {
- # Add firewall rules to ensure the IPA ramdisk can reach httpd, Ironic and the Inspector API on the host
- if [ "$IRONIC_PROVISIONING_INTERFACE" ]; then
- check_interface_ip $IRONIC_PROVISIONING_INTERFACE $IRONIC_PROVISIONING_INTERFACE_IP
- else
- exit 1
- fi
-
- for port in 80 5050 6385 ; do
- if ! sudo iptables -C INPUT -i $IRONIC_PROVISIONING_INTERFACE -p tcp -m tcp --dport $port -j ACCEPT > /dev/null 2>&1; then
- sudo iptables -I INPUT -i $IRONIC_PROVISIONING_INTERFACE -p tcp -m tcp --dport $port -j ACCEPT
- fi
- done
-
- #Allow access to dhcp and tftp server for pxeboot
- for port in 67 69 ; do
- if ! sudo iptables -C INPUT -i $IRONIC_PROVISIONING_INTERFACE -p udp --dport $port -j ACCEPT 2>/dev/null ; then
- sudo iptables -I INPUT -i $IRONIC_PROVISIONING_INTERFACE -p udp --dport $port -j ACCEPT
- fi
- done
-}
-
-function configure {
- configure_ironic_bridge
- configure_ironic_interfaces
-}
-
-configure
+++ /dev/null
-#!/usr/bin/env bash
-set -eux -o pipefail
-
-LIBDIR="$(dirname "$PWD")"
-
-source $LIBDIR/lib/common.sh
-
-# Kill and remove the running ironic containers
-for name in ironic ironic-inspector dnsmasq httpd mariadb ipa-downloader; do
- sudo docker ps | grep -w "$name$" && sudo docker kill "$name"
- sudo docker ps --all | grep -w "$name$" && sudo docker rm "$name" -f
-done
-
-ip link set provisioning down || true
-ip link del provisioning type bridge || true
-
-rm -rf ${IRONIC_DATA_DIR}
+++ /dev/null
-#!/usr/bin/env bash
-set -eux -o pipefail
-
-source $(dirname $PWD)/../lib/common.sh
-source $(dirname $PWD)/../lib/logging.sh
-
-if [[ $EUID -ne 0 ]]; then
- echo "This script must be run as root"
- exit 1
-fi
-
-function autoremove {
- rm -rf /etc/apt/sources.list.d/*
-}
-
-function clean_essential_packages {
- apt-get update
- for package in crudini curl dnsmasq figlet golang nmap patch psmisc \
- python3-pip python3-requests python3-setuptools vim wget; do
- apt-get remove $package -y
- done
- update-alternatives --remove python /usr/bin/python3
- update-alternatives --remove pip /usr/bin/pip3
-
- autoremove
-}
-
-function check_prerequisite {
- if !(which pip); then
- apt-get install python3-pip -y
- fi
- update-alternatives --install /usr/bin/python python /usr/bin/python3 1
- update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1
-
- if !(which curl); then
- apt-get install curl -y
- fi
-
- if !(which add-apt-repository); then
- apt-get install software-properties-common -y
- fi
-}
-
-function clean_ironic_packages {
- for package in python3-ironicclient \
- python3-ironic-inspector-client \
- python3-openstackclient genisoimage; do
- apt-get remove $package -y
- done
-}
-
-function clean_docker_packages {
- curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- add-apt-repository \
- "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
- $(lsb_release -cs) \
- stable"
- apt-get update
- docker rmi -f $(docker image ls -a -q)
- apt-get remove docker-ce -y
- apt-get remove -y docker \
- docker-engine \
- docker.io \
- containerd \
- runc \
- docker-ce
- apt-get purge docker-* -y --allow-change-held-packages
- apt-get update
-}
-
-function clean_kubernetes_packages {
- #Just to make sure kubernetes packages are removed during the download
- curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
- bash -c 'cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
-deb https://apt.kubernetes.io/ kubernetes-xenial main
-EOF'
- apt-get update
- apt-get remove kubelet kubeadm kubectl -y
-}
-
-function clean_apt_cache {
- shopt -s extglob
- pushd /var/cache/apt/archives
-
- if [ $(ls -1q . | wc -l ) -ge 3 ]; then
- $(rm !("lock"|"partial"))
- fi
- popd
-
-}
-
-if [ "$1" == "--only-packages" ]; then
- check_prerequisite
- clean_docker_packages || true
- autoremove
- exit 0
-fi
-
-check_prerequisite
-clean_apt_cache
-clean_kubernetes_packages
-clean_docker_packages
-clean_ironic_packages
-clean_essential_packages