From: Naga Sugguna Date: Thu, 18 Apr 2019 20:22:33 +0000 (+0000) Subject: Merge "Set of TCs to test K8s layer via Robot" X-Git-Tag: 2.0.0~97 X-Git-Url: https://gerrit.akraino.org/r/gitweb?p=validation.git;a=commitdiff_plain;h=d8a24b76b0c1cf0c98e47397aa4d6f68ed271951;hp=3c89b99ccaa8abef3a1e376a63b46de3d70af8b4 Merge "Set of TCs to test K8s layer via Robot" --- diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..59230bc --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +docker/manifest-tool +*.sw? diff --git a/.gitreview b/.gitreview new file mode 100644 index 0000000..4b0d2fd --- /dev/null +++ b/.gitreview @@ -0,0 +1,5 @@ +[gerrit] +host=gerrit.akraino.org +port=29418 +project=validation.git +defaultbranch=master diff --git a/bluval/README.md b/bluval/README.md new file mode 100644 index 0000000..0ccd6c5 --- /dev/null +++ b/bluval/README.md @@ -0,0 +1,10 @@ +# BluVal + +## Installation + +Minimum required python verson is python3.5 + +``` +python3 -m pip install -r requirements.txt +``` + diff --git a/bluval/bluval-base.yaml b/bluval/bluval-base.yaml new file mode 100644 index 0000000..4a9ce70 --- /dev/null +++ b/bluval/bluval-base.yaml @@ -0,0 +1,77 @@ +--- +############################################################################## +# Copyright (c) 2019 AT&T Intellectual Property. # +# Copyright (c) 2019 Nokia. # +# # +# Licensed under the Apache License, Version 2.0 (the "License"); you may # +# not use this file except in compliance with the License. # +# # +# You may obtain a copy of the License at # +# http://www.apache.org/licenses/LICENSE-2.0 # +# # +# Unless required by applicable law or agreed to in writing, software # +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # +# See the License for the specific language governing permissions and # +# limitations under the License. # +############################################################################## +blueprint: + name: base + sections: + - hw + - os + - networking + - k8s + - k8s_networking + - sds + - sdn + - vim + # Any hardware some basic tests + hw: &hw_base + - + name: bios_version + # something that can be evaluated to true or false + condition: true + what: /opt/akraino/validation/helloworld + # true or false, default is false + show_stopper: false + os: &os_base + - + name: os_version + what: /opt/akraino/validation/helloworld + networking: &networking + - + name: pxe_networking_test + what: /opt/akraino/validation/helloworld + - + name: routes_test + what: /opt/akraino/validation/helloworld + k8s: &k8s + - + name: conformance + what: /opt/akraino/validation/helloworld + - + name: e2e + what: /opt/akraino/validation/helloworld + k8s_networking: &k8s_networking + - + name: node_connectivity + what: /opt/akraino/validation/helloworld + - + name: pod_connectivity + what: /opt/akraino/validation/helloworld + # software defined storage + sds: &sds + - + name: sds + what: /opt/akraino/validation/helloworld + # software defined network + sdn: &sdn + - + name: sns + what: /opt/akraino/validation/helloworld + # Virtual Infrastructure Manager + vim: &vim + - + name: vim_basic + what: /opt/akraino/validation/helloworld diff --git a/bluval/bluval.py b/bluval/bluval.py new file mode 100644 index 0000000..c0c16de --- /dev/null +++ b/bluval/bluval.py @@ -0,0 +1,62 @@ +#!/usr/bin/python3 +############################################################################## +# Copyright (c) 2019 AT&T Intellectual Property. # +# Copyright (c) 2019 Nokia. # +# # +# Licensed under the Apache License, Version 2.0 (the "License"); you may # +# not use this file except in compliance with the License. # +# # +# You may obtain a copy of the License at # +# http://www.apache.org/licenses/LICENSE-2.0 # +# # +# Unless required by applicable law or agreed to in writing, software # +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # +# See the License for the specific language governing permissions and # +# limitations under the License. # +############################################################################## +"""This module parses yaml file, reads sections, testcases and executes each +testcase +""" + +import subprocess +import sys +import yaml + +def run_testcase(testcase): + """Runs a single testcase + """ + show_stopper = testcase.get('show_stopper', False) + + print('Executing testcase {}'.format(testcase['name'])) + print(' show_stopper {}'.format(show_stopper)) + cmd = 'robot {}'.format(testcase['what']) + print('Invoking {}'.format(cmd)) + try: + status = subprocess.call(cmd, shell=True) + if status != 0 and show_stopper: + print('Show stopper testcase failed') + return status + except OSError: + print('Error while executing {}'.format(cmd)) + return -1 + return status + + +def parse_yaml(testcase_loc): + """Parse yaml file and do tasks on each testcase + """ + with open(testcase_loc) as testcase_file: + testcases = yaml.safe_load(testcase_file) + blueprint = testcases['blueprint'] + for section in blueprint['sections']: + print('## Section {}'.format(section)) + for testcase in blueprint[section]: + run_testcase(testcase) + + +if __name__ == "__main__": + if len(sys.argv) != 2: + print('usage: bluval.py ') + sys.exit(1) + parse_yaml(sys.argv[1]) diff --git a/bluval/requirements.txt b/bluval/requirements.txt new file mode 100644 index 0000000..c3726e8 --- /dev/null +++ b/bluval/requirements.txt @@ -0,0 +1 @@ +pyyaml diff --git a/docker/Makefile b/docker/Makefile new file mode 100644 index 0000000..65ad526 --- /dev/null +++ b/docker/Makefile @@ -0,0 +1,36 @@ +############################################################################## +# Copyright (c) 2019 AT&T, ENEA AB, Nokia and others # +# # +# Licensed under the Apache License, Version 2.0 (the "License"); # +# you maynot use this file except in compliance with the License. # +# # +# You may obtain a copy of the License at # +# http://www.apache.org/licenses/LICENSE-2.0 # +# # +# Unless required by applicable law or agreed to in writing, software # +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # +# See the License for the specific language governing permissions and # +# limitations under the License. # +############################################################################## + +SUBDIRS := $(wildcard */.) +SUBDIRS_NAME := $(SUBDIRS:/.=) +SUBDIRS_BUILD := $(SUBDIRS:/.=-build) +SUBDIRS_PUSH := $(SUBDIRS:/.=-push) + +.PHONY: all +all: $(SUBDIRS_NAME) + +.PHONY: build-all +build-all: $(SUBDIRS_BUILD) + +.PHONY: $(SUBDIRS_NAME) +$(SUBDIRS_NAME): + $(MAKE) -C $@ + +.PHONY: $(SUBDIRS_BUILD) +$(SUBDIRS_BUILD): $(SUBDIRS) + $(MAKE) -C $< build + +include build.mk diff --git a/docker/README.rst b/docker/README.rst new file mode 100644 index 0000000..8182b73 --- /dev/null +++ b/docker/README.rst @@ -0,0 +1,37 @@ +.. ############################################################################ +.. Copyright (c) 2019 AT&T, ENEA AB, Nokia and others # +.. # +.. Licensed under the Apache License, Version 2.0 (the "License"); # +.. you maynot use this file except in compliance with the License. # +.. # +.. You may obtain a copy of the License at # +.. http://www.apache.org/licenses/LICENSE-2.0 # +.. # +.. Unless required by applicable law or agreed to in writing, software # +.. distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # +.. WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # +.. See the License for the specific language governing permissions and # +.. limitations under the License. # +.. ############################################################################ + + +Overview +======== + +The Makefile in this directory is used to build and push all +the validation containers. The command to do that is: + make all REGISTRY= +To just build the containers, use the command: + make build-all REGISTRY= + +The k8s container +================= + +To build just the k8s container, use the command: + make k8s-build REGISTRY= +To both build and push the container, use the command: + make k8s REGISTRY= + +Container should be started with the admin.conf file mounted: +docker run -ti -v /home/jenkins/admin.conf:/root/.kube/config \ +/akraino_validation:k8s-latest /bin/sh diff --git a/docker/build.mk b/docker/build.mk new file mode 100644 index 0000000..dde61fe --- /dev/null +++ b/docker/build.mk @@ -0,0 +1,52 @@ +############################################################################## +# Copyright (c) 2019 AT&T, ENEA AB, Nokia and others # +# # +# Licensed under the Apache License, Version 2.0 (the "License"); # +# you maynot use this file except in compliance with the License. # +# # +# You may obtain a copy of the License at # +# http://www.apache.org/licenses/LICENSE-2.0 # +# # +# Unless required by applicable law or agreed to in writing, software # +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # +# See the License for the specific language governing permissions and # +# limitations under the License. # +############################################################################## + + +# declare the variables +REGISTRY ?= # TBD +NAME ?= akraino_validation +TAG_PRE ?= $(notdir $(CURDIR)) +TAG_VER ?= latest +DOCKERFILE ?= Dockerfile +MTOOL ?= $(dir $(realpath $(lastword $(MAKEFILE_LIST))))/manifest-tool + +# get the architecture of the host +HOST_ARCH = amd64 +ifeq ($(shell uname -m), aarch64) + HOST_ARCH = arm64 +endif + +$(MTOOL): + wget https://github.com/estesp/manifest-tool/releases/download/v0.9.0/manifest-tool-linux-$(HOST_ARCH) -O $@ + sudo chmod +x $@ + +.PHONY: .build +.build: + docker build \ + -t $(REGISTRY)/$(NAME):$(TAG_PRE)-$(HOST_ARCH)-$(TAG_VER) \ + -f $(DOCKERFILE) \ + . + +.PHONY: .push_image +.push_image: .build + docker push $(REGISTRY)/$(NAME):$(TAG_PRE)-$(HOST_ARCH)-$(TAG_VER) + +.PHONY: .push_manifest +.push_manifest: $(MTOOL) + $(MTOOL) push from-args \ + --platforms linux/amd64,linux/arm64 \ + --template $(REGISTRY)/$(NAME):$(TAG_PRE)-ARCH-$(TAG_VER) \ + --target $(REGISTRY)/$(NAME):$(TAG_PRE)-$(TAG_VER) diff --git a/docker/k8s/Dockerfile b/docker/k8s/Dockerfile new file mode 100644 index 0000000..1d41d00 --- /dev/null +++ b/docker/k8s/Dockerfile @@ -0,0 +1,65 @@ +############################################################################## +# Copyright (c) 2019 AT&T, ENEA AB, Nokia and others # +# # +# Licensed under the Apache License, Version 2.0 (the "License"); # +# you maynot use this file except in compliance with the License. # +# # +# You may obtain a copy of the License at # +# http://www.apache.org/licenses/LICENSE-2.0 # +# # +# Unless required by applicable law or agreed to in writing, software # +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # +# See the License for the specific language governing permissions and # +# limitations under the License. # +############################################################################## + +# ref: https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#use-multi-stage-builds +FROM golang:alpine3.9 as build + +# Sonobuoy supports Kubernetes versions 1.11, 1.12 and 1.13 +ARG K8S_TAG=v1.13.0 + +# Install dependencies +COPY pip-requirements.txt /wheels/requirements/pip-requirements.txt +RUN apk --no-cache add --update \ + openssl \ + python3 \ + bash \ + findutils \ + gcc \ + git \ + grep \ + libc-dev \ + libffi \ + libffi-dev \ + make \ + openssl-dev \ + python3-dev \ + py3-pip \ + rsync + +# Build binaries; detect the architecture automatically (default is amd64) +RUN git clone https://github.com/kubernetes/kubernetes /src/k8s.io/kubernetes +RUN if [ $(uname -m) == 'aarch64' ]; then HOST_ARCH=arm64; else HOST_ARCH=amd64; fi && \ + echo "Building docker on $HOST_ARCH" && \ + cd /src/k8s.io/kubernetes && \ + git checkout $K8S_TAG && \ + make kubectl ginkgo && \ + make WHAT=test/e2e/e2e.test ARCH=$HOST_ARCH +RUN go get -u -v github.com/heptio/sonobuoy + +WORKDIR /wheels +RUN pip3 install wheel +RUN pip3 wheel -r /wheels/requirements/pip-requirements.txt + +# Copy binaries in the final contaier and install robot framework +FROM python:3.6-alpine3.9 +COPY --from=build /src/k8s.io/kubernetes/_output/bin /usr/local/bin +COPY --from=build /go/bin/sonobuoy /bin/sonobuoy +COPY --from=build /wheels /wheels + +RUN pip3 install -r /wheels/requirements/pip-requirements.txt \ + -f /wheels && \ + rm -rf /wheels && \ + rm -rf /root/.cache/pip/* diff --git a/docker/k8s/Makefile b/docker/k8s/Makefile new file mode 100644 index 0000000..a5b4099 --- /dev/null +++ b/docker/k8s/Makefile @@ -0,0 +1,23 @@ +############################################################################## +# Copyright (c) 2019 AT&T, ENEA AB, Nokia and others # +# # +# Licensed under the Apache License, Version 2.0 (the "License"); # +# you maynot use this file except in compliance with the License. # +# # +# You may obtain a copy of the License at # +# http://www.apache.org/licenses/LICENSE-2.0 # +# # +# Unless required by applicable law or agreed to in writing, software # +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # +# See the License for the specific language governing permissions and # +# limitations under the License. # +############################################################################## + +.PHONY: all +all: .push_image .push_manifest + +.PHONY: build +build: .build + +include ../build.mk diff --git a/docker/k8s/pip-requirements.txt b/docker/k8s/pip-requirements.txt new file mode 100644 index 0000000..6139a45 --- /dev/null +++ b/docker/k8s/pip-requirements.txt @@ -0,0 +1,4 @@ +robotframework +robotframework-httplibrary +robotframework-requests +robotframework-sshlibrary diff --git a/helloworld/helloworld.robot b/helloworld/helloworld.robot new file mode 100644 index 0000000..aa85d18 --- /dev/null +++ b/helloworld/helloworld.robot @@ -0,0 +1,22 @@ +############################################################################## +# Copyright (c) 2019 AT&T Intellectual Property. # +# Copyright (c) 2019 Nokia. # +# # +# Licensed under the Apache License, Version 2.0 (the "License"); you may # +# not use this file except in compliance with the License. # +# # +# You may obtain a copy of the License at # +# http://www.apache.org/licenses/LICENSE-2.0 # +# # +# Unless required by applicable law or agreed to in writing, software # +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # +# See the License for the specific language governing permissions and # +# limitations under the License. # +############################################################################## +*** Test Cases *** +Test With Settings + [Documentation] Another dummy test + [Tags] dummy owner-johndoe + Log Hello, world! +