aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Mikus <pmikus@cisco.com>2018-09-25 11:25:22 +0000
committerPeter Mikus <pmikus@cisco.com>2018-09-26 10:53:07 +0000
commit585bba1465e4fe2e83f6ff702c7db5af4f05d162 (patch)
tree774141953af3b25ead6d9203ba7744670f5f9d83
parent638391c368a5539f2b9920a43302254070440a1f (diff)
CSIT-1316 Fix ligato building mechanics in CSIT bootstraps
Change-Id: Ia8da73cbf7ab213b61a330b757419330667be24b Signed-off-by: Peter Mikus <pmikus@cisco.com>
-rw-r--r--resources/libraries/bash/function/gather.sh54
-rw-r--r--resources/libraries/bash/shell/k8s_utils.sh2
-rw-r--r--resources/libraries/python/KubernetesUtils.py48
-rw-r--r--tests/kubernetes/perf/__init__.robot5
4 files changed, 75 insertions, 34 deletions
diff --git a/resources/libraries/bash/function/gather.sh b/resources/libraries/bash/function/gather.sh
index e030652494..b5bc692955 100644
--- a/resources/libraries/bash/function/gather.sh
+++ b/resources/libraries/bash/function/gather.sh
@@ -152,50 +152,46 @@ function gather_ligato () {
gather_vpp || die "The function should have died on error."
- # Extract VPP API to specific folder
- # FIXME: Make sure /tmp/vpp/ exists. Should we clean it?
+ mkdir -p /tmp/vpp && rm -f /tmp/vpp/* || {
+ die "Failed to create temporary directory!"
+ }
dpkg -x "${DOWNLOAD_DIR}/vpp_"*".deb" "/tmp/vpp" || {
die "Failed to extract VPP packages for kubernetes!"
}
ligato_repo_url="https://github.com/ligato/"
- vpp_agent_stable_ver="$(cat "${CSIT_DIR}/VPP_AGENT_STABLE_VER")" || {
- die "Cat failed."
+ vpp_agent_stable_ver="$(< "${CSIT_DIR}/VPP_AGENT_STABLE_VER")" || {
+ die "Failed to read vpp-agent stable version!"
}
- docker_deb="docker-ce_18.03.0~ce-0~ubuntu_amd64.deb"
- # Clone & checkout stable vpp-agent
- cd "${CSIT_DIR}" || die "Change directory failed."
+ # Clone & checkout stable vpp-agent.
+ cd "${CSIT_DIR}" || die "Change directory failed!"
git clone -b "${vpp_agent_stable_ver}" --single-branch \
"${ligato_repo_url}/vpp-agent" "vpp-agent" || {
die "Failed to run: git clone ${ligato_repo_url}/vpp-agent!"
}
- cd "vpp-agent" || die "Change directory failed."
-
- # Install Docker
- url_prefix="https://download.docker.com/linux/ubuntu/dists/xenial/pool"
- # URL is not in quotes, calling command from variable keeps them.
- wget_command=("wget" "-nv" "${url_prefix}/stable/amd64/${docker_deb}")
- "${wget_command[@]}" || die "Failed to download Docker package!"
+ cd "vpp-agent" || die "Change directory failed!"
- sudo dpkg -i "${docker_deb}" || die "Failed to install Docker!"
+ # Install Docker.
+ curl -fsSL https://get.docker.com | sudo bash || {
+ die "Failed to install Docker package!"
+ }
- # Pull ligato/dev_vpp_agent docker image and re-tag as local
+ # Pull ligato/dev_vpp_agent docker image and re-tag as local.
sudo docker pull "ligato/dev-vpp-agent:${vpp_agent_stable_ver}" || {
die "Failed to pull Docker image!"
}
-
- first_arg="ligato/dev-vpp-agent:${vpp_agent_stable_ver}"
- sudo docker tag "${first_arg}" "dev_vpp_agent:latest" || {
+ params=(ligato/dev-vpp-agent:${vpp_agent_stable_ver} dev_vpp_agent:latest)
+ sudo docker tag "${params[@]}" || {
die "Failed to tag Docker image!"
}
- # Start dev_vpp_agent container as daemon
+ # Start dev_vpp_agent container as daemon.
sudo docker run --rm -itd --name "agentcnt" "dev_vpp_agent" bash || {
die "Failed to run Docker image!"
}
- # Copy latest vpp api into running container
+ # Copy latest vpp api into running container.
sudo docker exec agentcnt rm -rf "agentcnt:/usr/share/vpp/api" || {
die "Failed to remove previous API!"
}
@@ -203,7 +199,7 @@ function gather_ligato () {
die "Failed to copy files Docker image!"
}
- # Recompile vpp-agent
+ # Recompile vpp-agent.
script_arg=". ~/.bashrc; cd /go/src/github.com/ligato/vpp-agent"
script_arg+=" && make generate && make install"
sudo docker exec -i agentcnt script -qec "${script_arg}" || {
@@ -216,28 +212,28 @@ function gather_ligato () {
}
for f in "${DOWNLOAD_DIR}"/*; do
sudo docker cp "$f" "agentcnt:/opt/vpp-agent/dev/vpp/build-root"/ || {
- die "Failed to copy files Docker image!"
+ die "Failed to copy files to Docker image!"
}
done
- # Save container state
+ # Save container state.
sudo docker commit "$(sudo docker ps -q)" "dev_vpp_agent:latest" || {
die "Failed to commit state of Docker image!"
}
- # Build prod_vpp_agent docker image
+ # Build prod_vpp_agent docker image.
cd "docker/prod" || die "Change directory failed."
sudo docker build --tag "prod_vpp_agent" --no-cache "." || {
die "Failed to build Docker image!"
}
- # Export Docker image
+ # Export Docker image.
sudo docker save "prod_vpp_agent" | gzip > "prod_vpp_agent.tar.gz" || {
die "Failed to save Docker image!"
}
docker_image="$(readlink -e "prod_vpp_agent.tar.gz")" || {
- die "Readlink failed."
+ die "Failed to get Docker image path!"
}
- rm -r "${DOWNLOAD_DIR}/vpp"* || die "Rm failed."
- mv "${docker_image}" "${DOWNLOAD_DIR}"/ || die "Mv failed."
+ rm -r "${DOWNLOAD_DIR}/vpp"* || die "Failed to remove VPP packages!"
+ mv "${docker_image}" "${DOWNLOAD_DIR}"/ || die "Failed to move image!"
}
diff --git a/resources/libraries/bash/shell/k8s_utils.sh b/resources/libraries/bash/shell/k8s_utils.sh
index 55d3d815c9..ac5ecfa287 100644
--- a/resources/libraries/bash/shell/k8s_utils.sh
+++ b/resources/libraries/bash/shell/k8s_utils.sh
@@ -18,7 +18,7 @@ function k8s_utils.destroy {
kubectl delete node $HOSTNAME
# Revert any changes made to this host by 'kubeadm init' or 'kubeadm join'
- sudo kubeadm reset && sudo rm -rf $HOME/.kube || \
+ sudo kubeadm reset --force && sudo rm -rf $HOME/.kube || \
{ echo "Failed to reset kubeadm"; exit 1; }
}
diff --git a/resources/libraries/python/KubernetesUtils.py b/resources/libraries/python/KubernetesUtils.py
index 14cba480ac..7a4784d42f 100644
--- a/resources/libraries/python/KubernetesUtils.py
+++ b/resources/libraries/python/KubernetesUtils.py
@@ -17,7 +17,7 @@ from time import sleep
from resources.libraries.python.constants import Constants
from resources.libraries.python.topology import NodeType
-from resources.libraries.python.ssh import SSH
+from resources.libraries.python.ssh import SSH, exec_cmd_no_error
from resources.libraries.python.CpuUtils import CpuUtils
from resources.libraries.python.VppConfigGenerator import VppConfigGenerator
@@ -34,6 +34,46 @@ class KubernetesUtils(object):
pass
@staticmethod
+ def load_docker_image_on_node(node, image_path):
+ """Load Docker container image from file on node.
+
+ :param node: DUT node.
+ :param image_path: Container image path.
+ :type node: dict
+ :type image_path: str
+ :raises RuntimeError: If loading image failed on node.
+ """
+ command = 'docker load -i {image_path}'.\
+ format(image_path=image_path)
+ message = 'Failed to load Docker image on {node}.'.\
+ format(node=node['host'])
+ exec_cmd_no_error(node, command, timeout=240, sudo=True,
+ message=message)
+
+ command = "docker rmi $(sudo docker images -f 'dangling=true' -q)".\
+ format(image_path=image_path)
+ message = 'Failed to clean Docker images on {node}.'.\
+ format(node=node['host'])
+ try:
+ exec_cmd_no_error(node, command, timeout=240, sudo=True,
+ message=message)
+ except RuntimeError:
+ pass
+
+ @staticmethod
+ def load_docker_image_on_all_duts(nodes, image_path):
+ """Load Docker container image from file on all DUTs.
+
+ :param nodes: Topology nodes.
+ :param image_path: Container image path.
+ :type nodes: dict
+ :type image_path: str
+ """
+ for node in nodes.values():
+ if node['type'] == NodeType.DUT:
+ KubernetesUtils.load_docker_image_on_node(node, image_path)
+
+ @staticmethod
def setup_kubernetes_on_node(node):
"""Set up Kubernetes on node.
@@ -216,12 +256,12 @@ class KubernetesUtils(object):
cmd = 'kubectl delete {nspace} {rtype} {name}'\
.format(nspace=nspace, rtype=rtype, name=name)
- (ret_code, _, _) = ssh.exec_command_sudo(cmd)
+ (ret_code, _, _) = ssh.exec_command_sudo(cmd, timeout=120)
if int(ret_code) != 0:
raise RuntimeError('Failed to delete Kubernetes resources '
'on {node}.'.format(node=node['host']))
- cmd = 'kubectl get {nspace} pods -a --no-headers'\
+ cmd = 'kubectl get {nspace} pods --no-headers'\
.format(nspace=nspace)
for _ in range(MAX_RETRY):
(ret_code, stdout, stderr) = ssh.exec_command_sudo(cmd)
@@ -355,7 +395,7 @@ class KubernetesUtils(object):
nspace = '-n {nspace}'.format(nspace=nspace) if nspace \
else '--all-namespaces'
- cmd = 'kubectl get {nspace} pods -a --no-headers' \
+ cmd = 'kubectl get {nspace} pods --no-headers' \
.format(nspace=nspace)
for _ in range(MAX_RETRY):
(ret_code, stdout, _) = ssh.exec_command_sudo(cmd)
diff --git a/tests/kubernetes/perf/__init__.robot b/tests/kubernetes/perf/__init__.robot
index fd5e0328be..d21f2eecba 100644
--- a/tests/kubernetes/perf/__init__.robot
+++ b/tests/kubernetes/perf/__init__.robot
@@ -25,6 +25,8 @@
| Library | Collections
| Suite Setup | Run Keywords | Setup performance global Variables
| ... | AND | Setup Framework | ${nodes}
+| ... | AND | Load Docker image on all duts | ${nodes}
+| ... | ${dcr_image}
| ... | AND | Setup Kubernetes on all duts | ${nodes}
| ... | AND | Get CPU Layout from all nodes | ${nodes}
| ... | AND | Update all numa nodes | ${nodes}
@@ -39,6 +41,7 @@
| | ... | Setup suite Variables. Variables are used across performance testing.
| | ...
| | ... | _NOTE:_ This KW sets following suite variables:
+| | ... | - dcr_image - vpp-agent docker image
| | ... | - perf_pdr_loss_acceptance - Loss acceptance treshold
| | ... | - perf_pdr_loss_acceptance_type - Loss acceptance treshold type
| | ... | - pkt_trace - Switch to enable packet trace for test
@@ -46,6 +49,8 @@
| | ... | - uio_driver - Default UIO driver
| | ... | - plugins_to_enable - List of plugins to be enabled for test
| | ...
+| | Set Global Variable | ${dcr_image}
+| | ... | /tmp/openvpp-testing/download_dir/prod_vpp_agent.tar.gz
| | Set Global Variable | ${perf_pdr_loss_acceptance} | 0.5
| | Set Global Variable | ${perf_pdr_loss_acceptance_type} | percentage
| | Set Global Variable | ${pkt_trace} | ${False}