From 5cf0b2327c13f8da4df14b969677bef949629126 Mon Sep 17 00:00:00 2001 From: Pete Birley Date: Tue, 9 Jul 2019 13:52:24 -0500 Subject: [PATCH] CI: Add a functional test for interacting with a existing k8s cluster This adds Ansible playbooks to install kubernetes using minikube and then assert that airshipctl is able to communicate with the cluster. Change-Id: Ice5cf3de8d9192d508c79c68caf8f5a61896da9c Signed-off-by: Pete Birley --- Dockerfile | 2 + Makefile | 31 ++++++++++----- ... => airship-airshipctl-deploy-docker.yaml} | 1 + ...irship-airshipctl-deploy-existing-k8s.yaml | 15 +++++++ ...ip-airshipctl-functional-existing-k8s.yaml | 39 +++++++++++++++++++ ...yaml => airship-airshipctl-lint-unit.yaml} | 2 +- zuul.d/jobs.yaml | 14 +++++-- zuul.d/nodesets.yaml | 2 +- zuul.d/projects.yaml | 8 ++-- 9 files changed, 95 insertions(+), 19 deletions(-) rename playbooks/{airship-airshipctl-common.yaml => airship-airshipctl-deploy-docker.yaml} (99%) create mode 100644 playbooks/airship-airshipctl-deploy-existing-k8s.yaml create mode 100644 playbooks/airship-airshipctl-functional-existing-k8s.yaml rename playbooks/{airship-airshipctl-lint-test.yaml => airship-airshipctl-lint-unit.yaml} (100%) diff --git a/Dockerfile b/Dockerfile index dc285b904..77ec8e8da 100644 --- a/Dockerfile +++ b/Dockerfile @@ -18,3 +18,5 @@ RUN make ${MAKE_TARGET} && \ FROM ${RELEASE_IMAGE} as release COPY --from=builder /usr/src/airshipctl/bin/airshipctl /usr/local/bin/airshipctl +USER 65534 +ENTRYPOINT [ "/usr/local/bin/airshipctl" ] diff --git a/Makefile b/Makefile index 3e39e3094..828f7cded 100644 --- a/Makefile +++ b/Makefile @@ -1,22 +1,29 @@ SHELL := /bin/bash -GO_FLAGS := -ldflags '-extldflags "-static"' -tags=netgo +GO_FLAGS := -ldflags '-extldflags "-static"' -tags=netgo -BINDIR := bin -EXECUTABLE_CLI := airshipctl +BINDIR := bin +EXECUTABLE_CLI := airshipctl -SCRIPTS_DIR := scripts +SCRIPTS_DIR := scripts # linting -LINTER_CMD := "github.com/golangci/golangci-lint/cmd/golangci-lint" run -ADDTL_LINTERS := goconst,gofmt,unparam +LINTER_CMD := "github.com/golangci/golangci-lint/cmd/golangci-lint" run +ADDTL_LINTERS := goconst,gofmt,unparam # docker -DOCKER_MAKE_TARGET := build +DOCKER_MAKE_TARGET := build + +# docker image options +DOCKER_REGISTRY ?= quay.io +DOCKER_IMAGE_NAME ?= airshipctl +DOCKER_IMAGE_PREFIX ?= airshipit +DOCKER_IMAGE_TAG ?= dev +DOCKER_IMAGE ?= ${DOCKER_REGISTRY}/${DOCKER_IMAGE_PREFIX}/${DOCKER_IMAGE_NAME}:${DOCKER_IMAGE_TAG} # go options -PKG := ./... -TESTS := . +PKG := ./... +TESTS := . .PHONY: get-modules get-modules: @@ -46,7 +53,11 @@ lint: .PHONY: docker-image docker-image: - @docker build . --build-arg MAKE_TARGET=$(DOCKER_MAKE_TARGET) + @docker build . --build-arg MAKE_TARGET=$(DOCKER_MAKE_TARGET) --tag $(DOCKER_IMAGE) + +.PHONY: print-docker-image-tag +print-docker-image-tag: + @echo "$(DOCKER_IMAGE)" .PHONY: docker-image-unit-tests docker-image-unit-tests: DOCKER_MAKE_TARGET = unit-tests diff --git a/playbooks/airship-airshipctl-common.yaml b/playbooks/airship-airshipctl-deploy-docker.yaml similarity index 99% rename from playbooks/airship-airshipctl-common.yaml rename to playbooks/airship-airshipctl-deploy-docker.yaml index d1dffe950..483283736 100644 --- a/playbooks/airship-airshipctl-common.yaml +++ b/playbooks/airship-airshipctl-deploy-docker.yaml @@ -9,6 +9,7 @@ # 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. + - hosts: all roles: - install-docker diff --git a/playbooks/airship-airshipctl-deploy-existing-k8s.yaml b/playbooks/airship-airshipctl-deploy-existing-k8s.yaml new file mode 100644 index 000000000..d6c5bf180 --- /dev/null +++ b/playbooks/airship-airshipctl-deploy-existing-k8s.yaml @@ -0,0 +1,15 @@ +# 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. + +- hosts: primary + roles: + - install-kubernetes diff --git a/playbooks/airship-airshipctl-functional-existing-k8s.yaml b/playbooks/airship-airshipctl-functional-existing-k8s.yaml new file mode 100644 index 000000000..d116fbeb5 --- /dev/null +++ b/playbooks/airship-airshipctl-functional-existing-k8s.yaml @@ -0,0 +1,39 @@ +# 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. + +- hosts: primary + tasks: + - name: "Build and install airshipctl" + block: + - name: "make docker-image" + make: + chdir: "{{ zuul.project.src_dir }}" + target: docker-image + + - name: "copy airshipctl binary to host" + shell: | + set -ex + DOCKER_IMAGE_TAG=$(make print-docker-image-tag) + CONTAINER=$(docker create "${DOCKER_IMAGE_TAG}") + sudo docker cp "${CONTAINER}:/usr/local/bin/airshipctl" "/usr/local/bin/airshipctl" + docker rm "${CONTAINER}" + args: + chdir: "{{ zuul.project.src_dir }}" + + - name: "Run functional test cases against pre-existing k8s cluster" + block: + - name: "airshipctl kubectl version" + shell: | + set -ex + airshipctl kubectl version + args: + chdir: "{{ zuul.project.src_dir }}" diff --git a/playbooks/airship-airshipctl-lint-test.yaml b/playbooks/airship-airshipctl-lint-unit.yaml similarity index 100% rename from playbooks/airship-airshipctl-lint-test.yaml rename to playbooks/airship-airshipctl-lint-unit.yaml index cf467c0ea..cf735a6ef 100644 --- a/playbooks/airship-airshipctl-lint-test.yaml +++ b/playbooks/airship-airshipctl-lint-unit.yaml @@ -9,9 +9,9 @@ # 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. + - hosts: primary tasks: - - name: Run Linter block: - name: "make docker-image-lint" diff --git a/zuul.d/jobs.yaml b/zuul.d/jobs.yaml index 773dda002..f2697dddd 100644 --- a/zuul.d/jobs.yaml +++ b/zuul.d/jobs.yaml @@ -1,4 +1,3 @@ ---- # 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 @@ -10,8 +9,15 @@ # 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. + - job: - name: airship-airshipctl-lint-test - pre-run: playbooks/airship-airshipctl-common.yaml - run: playbooks/airship-airshipctl-lint-test.yaml + name: airship-airshipctl-lint-unit + pre-run: playbooks/airship-airshipctl-deploy-docker.yaml + run: playbooks/airship-airshipctl-lint-unit.yaml + nodeset: airship-airshipctl-single-node + +- job: + name: airship-airshipctl-functional-existing-k8s + pre-run: playbooks/airship-airshipctl-deploy-existing-k8s.yaml + run: playbooks/airship-airshipctl-functional-existing-k8s.yaml nodeset: airship-airshipctl-single-node diff --git a/zuul.d/nodesets.yaml b/zuul.d/nodesets.yaml index 906ee1230..611facf3f 100644 --- a/zuul.d/nodesets.yaml +++ b/zuul.d/nodesets.yaml @@ -1,4 +1,3 @@ ---- # 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 @@ -10,6 +9,7 @@ # 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. + - nodeset: name: airship-airshipctl-single-node nodes: diff --git a/zuul.d/projects.yaml b/zuul.d/projects.yaml index aa883cfd7..9afb22caf 100644 --- a/zuul.d/projects.yaml +++ b/zuul.d/projects.yaml @@ -1,4 +1,3 @@ ---- # 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 @@ -10,10 +9,13 @@ # 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. + - project: check: jobs: - - airship-airshipctl-lint-test + - airship-airshipctl-lint-unit + - airship-airshipctl-functional-existing-k8s gate: jobs: - - airship-airshipctl-lint-test + - airship-airshipctl-lint-unit + - airship-airshipctl-functional-existing-k8s