From 2eaedf43d3c436adc5681721a6f658fb8abfe8a0 Mon Sep 17 00:00:00 2001 From: Andrey Volkov Date: Mon, 29 Oct 2018 15:00:44 -0700 Subject: [PATCH] Add lint and check gates for airship-utils This is base CR for all other CRs in airship-utils. It sets up gates config with .zuul.yaml. It was intended that airship-utils project is a collection of utils can be used in Airship. At the moment only one util is available - miniMirror. So all gates checking aims to miniMirror checks. Two gates available: - Lint gate runs shellcheck on assets/*.sh and hadolint Dockerfile. Can be checked locally with "make lint". - Check gate builds an image and runs container from the image. It also checks that it's possible to install Debian packages from the running container. Change-Id: I354cf96a4ddcd9f1f077a4a93869178ec6c366ab --- .zuul.yaml | 59 ++++++++++++++++++ Makefile | 29 ++++++--- Dockerfile => mini-mirror/Dockerfile | 4 +- {assets => mini-mirror/assets}/aptly.conf | 0 {assets => mini-mirror/assets}/gpg.conf.sh | 0 {assets => mini-mirror/assets}/gpg/.empty | 0 mini-mirror/assets/gpg/aptly.pub | Bin 0 -> 2020 bytes {assets => mini-mirror/assets}/gpg_batch.sh | 0 {assets => mini-mirror/assets}/nginx.conf.sh | 0 .../assets}/nginx/blacklist.conf | 0 .../assets}/packages/default | 0 mini-mirror/assets/packages/my_packages | 5 ++ {assets => mini-mirror/assets}/run_nginx.sh | 0 .../assets}/run_supervisord.sh | 0 {assets => mini-mirror/assets}/startup.sh | 0 .../assets}/supervisord.nginx.conf | 0 .../assets}/update_mirror_ubuntu.sh | 0 tools/gate/playbooks/osh-infra-build.yaml | 36 +++++++++++ .../playbooks/osh-infra-collect-logs.yaml | 30 +++++++++ .../playbooks/osh-infra-deploy-docker.yaml | 43 +++++++++++++ .../gate/playbooks/osh-infra-deploy-k8s.yaml | 36 +++++++++++ .../playbooks/osh-infra-upgrade-host.yaml | 41 ++++++++++++ tools/gate/playbooks/zuul-check.yaml | 21 +++++++ tools/gate/playbooks/zuul-linter.yaml | 21 +++++++ 24 files changed, 313 insertions(+), 12 deletions(-) create mode 100644 .zuul.yaml rename Dockerfile => mini-mirror/Dockerfile (97%) rename {assets => mini-mirror/assets}/aptly.conf (100%) rename {assets => mini-mirror/assets}/gpg.conf.sh (100%) rename {assets => mini-mirror/assets}/gpg/.empty (100%) create mode 100644 mini-mirror/assets/gpg/aptly.pub rename {assets => mini-mirror/assets}/gpg_batch.sh (100%) rename {assets => mini-mirror/assets}/nginx.conf.sh (100%) rename {assets => mini-mirror/assets}/nginx/blacklist.conf (100%) rename {assets => mini-mirror/assets}/packages/default (100%) create mode 100644 mini-mirror/assets/packages/my_packages rename {assets => mini-mirror/assets}/run_nginx.sh (100%) rename {assets => mini-mirror/assets}/run_supervisord.sh (100%) rename {assets => mini-mirror/assets}/startup.sh (100%) rename {assets => mini-mirror/assets}/supervisord.nginx.conf (100%) rename {assets => mini-mirror/assets}/update_mirror_ubuntu.sh (100%) create mode 100644 tools/gate/playbooks/osh-infra-build.yaml create mode 100644 tools/gate/playbooks/osh-infra-collect-logs.yaml create mode 100644 tools/gate/playbooks/osh-infra-deploy-docker.yaml create mode 100644 tools/gate/playbooks/osh-infra-deploy-k8s.yaml create mode 100644 tools/gate/playbooks/osh-infra-upgrade-host.yaml create mode 100644 tools/gate/playbooks/zuul-check.yaml create mode 100644 tools/gate/playbooks/zuul-linter.yaml diff --git a/.zuul.yaml b/.zuul.yaml new file mode 100644 index 0000000..4073cb4 --- /dev/null +++ b/.zuul.yaml @@ -0,0 +1,59 @@ +# 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. + +- project: + check: + jobs: + - airship-utils-linter + - airship-utils-ubuntu + + gate: + jobs: + - airship-utils-linter + - airship-utils-ubuntu + +- job: + name: airship-utils-linter + roles: + - zuul: openstack/openstack-helm-infra + vars: + zuul_osh_infra_relative_path: ../openstack-helm-infra/ + timeout: 7200 + pre-run: + - tools/gate/playbooks/osh-infra-upgrade-host.yaml + - tools/gate/playbooks/osh-infra-deploy-docker.yaml + run: tools/gate/playbooks/zuul-linter.yaml + post-run: tools/gate/playbooks/osh-infra-collect-logs.yaml + required-projects: + - openstack/openstack-helm-infra + +- job: + name: airship-utils + roles: + - zuul: openstack/openstack-helm-infra + vars: + zuul_osh_infra_relative_path: ../openstack-helm-infra/ + timeout: 7200 + pre-run: + - tools/gate/playbooks/osh-infra-upgrade-host.yaml + - tools/gate/playbooks/osh-infra-deploy-docker.yaml + - tools/gate/playbooks/osh-infra-build.yaml + - tools/gate/playbooks/osh-infra-deploy-k8s.yaml + run: tools/gate/playbooks/zuul-check.yaml + post-run: tools/gate/playbooks/osh-infra-collect-logs.yaml + required-projects: + - openstack/openstack-helm-infra + +- job: + name: airship-utils-ubuntu + parent: airship-utils + nodeset: openstack-helm-single-node diff --git a/Makefile b/Makefile index 82290f2..3ccebcb 100644 --- a/Makefile +++ b/Makefile @@ -14,13 +14,13 @@ IMAGE_PREFIX ?= airshipit IMAGE_TAG ?= untagged -IMAGE_NAME := aptly +IMAGE_NAME := mini-mirror COMMIT ?= commit-id DOCKER_REGISTRY ?= quay.io PUSH_IMAGE ?= false -HELM := $(BUILD_DIR)/helm +HELM := helm PROXY ?= http://proxy.foo.com:8000 NO_PROXY ?= localhost,127.0.0.1,.svc.cluster.local @@ -30,11 +30,16 @@ UBUNTU_BASE_IMAGE ?= ubuntu:16.04 IMAGE:=${DOCKER_REGISTRY}/${IMAGE_PREFIX}/$(IMAGE_NAME):${IMAGE_TAG} -.PHONY: validate -validate: lint tests +MINI_MIRROR := mini-mirror -.PHONY: tests -tests: clean build +.PHONY: validate +validate: lint test + +.PHONY: test +test: test-containers + +.PHONY: test-containers +test-containers: clean build docker run -d \ --publish 8080:80 \ --volume $(shell pwd)/assets/nginx:/opt/nginx \ @@ -52,13 +57,13 @@ clean: .PHONY: lint lint: - shellcheck assets/*.sh - hadolint Dockerfile + shellcheck $(MINI_MIRROR)/assets/*.sh + docker run --rm -i hadolint/hadolint < $(MINI_MIRROR)/Dockerfile .PHONY: build build: ifeq ($(USE_PROXY), true) - docker build --network host -t $(IMAGE) \ + cd $(MINI_MIRROR); docker build --network host -t $(IMAGE) \ --label "org.opencontainers.image.revision=$(COMMIT)" \ --label "org.opencontainers.image.created=$(shell date --rfc-3339=seconds --utc)" \ --label "org.opencontainers.image.title=$(IMAGE_NAME)" \ @@ -70,7 +75,7 @@ ifeq ($(USE_PROXY), true) --build-arg no_proxy=$(NO_PROXY) \ --build-arg NO_PROXY=$(NO_PROXY) . else - docker build --network host -t $(IMAGE) \ + cd $(MINI_MIRROR); docker build --network host -t $(IMAGE) \ --label "org.opencontainers.image.revision=$(COMMIT)" \ --label "org.opencontainers.image.created=$(shell date --rfc-3339=seconds --utc)" \ --label "org.opencontainers.image.title=$(IMAGE_NAME)" \ @@ -79,3 +84,7 @@ endif ifeq ($(PUSH_IMAGE), true) docker push $(IMAGE) endif + +.PHONY: lint-install +lint-install: + apt-get install -y shellcheck diff --git a/Dockerfile b/mini-mirror/Dockerfile similarity index 97% rename from Dockerfile rename to mini-mirror/Dockerfile index 44ac55d..05917dc 100644 --- a/Dockerfile +++ b/mini-mirror/Dockerfile @@ -32,10 +32,10 @@ RUN apt-get -q update \ gpgv=1.4.20-1ubuntu3.3 \ graphviz=2.38.0-12ubuntu2.1 \ supervisor=3.2.0-2ubuntu0.2 \ - nginx=1.10.3-0ubuntu0.16.04.2 \ + nginx=1.10.3-0ubuntu0.16.04.3 \ wget=1.17.1-1ubuntu1.4 \ xz-utils=5.1.1alpha+20120614-2ubuntu2 \ - apt-utils=1.2.27 \ + apt-utils=1.2.29 \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* diff --git a/assets/aptly.conf b/mini-mirror/assets/aptly.conf similarity index 100% rename from assets/aptly.conf rename to mini-mirror/assets/aptly.conf diff --git a/assets/gpg.conf.sh b/mini-mirror/assets/gpg.conf.sh similarity index 100% rename from assets/gpg.conf.sh rename to mini-mirror/assets/gpg.conf.sh diff --git a/assets/gpg/.empty b/mini-mirror/assets/gpg/.empty similarity index 100% rename from assets/gpg/.empty rename to mini-mirror/assets/gpg/.empty diff --git a/mini-mirror/assets/gpg/aptly.pub b/mini-mirror/assets/gpg/aptly.pub new file mode 100644 index 0000000000000000000000000000000000000000..dd54072ac55c70119d4d9c7e556594e14dd9f774 GIT binary patch literal 2020 zcmV}2Z+@Px?-v9OLy+f8-9}&DeX(~X zgkHjwktXHyZ?E?^DX`;jc4^s1E^0_QeGz0VxPUlDpW@Mfv20-P{XN$yjrmmX{AF$U zhSi1w#gvMS&T=vFjTBcUs!Sx;H){5IWNeZr=J2~*5s+f-t>4Ivg&mFE8_JujnU#b2 zEIL|*Z^VW?@N-xOX!aiqE8D%(du`i+I$PVRKPGbq-J|UaKy zk=6?gm1vm|rLsVB%Hb`VKJV4-xUg$f-o~Dssd7AIG7`gDKz0{Le+Uv&R}HoZZevk- zfO{gAC2nA5UkLya0RRECI7)A5ZXi=_X>@2HC_!*^YzX>MmJAUtYs zXl^cZZE199KxKGgZE$R5E@N+PK8XTO1QP)W05}#Q1Oiu*P8JQ$H9qh*&jA%@$YBay z$pr#i+?{y>8!rV52?z%Q1{Dek2nzxP76JnS0v-VZ7k~f?2@nAlXUJg+UCGtn5CD}# z#7f=ajg^w^H9_O*x*!ZeULT2(M%N>uzs8ofnS>cbls1c!m7C%D7(_CX>t>iIf~ah zF;N_`SYNk4LaLsd$^@c$TdiKl*7zfB6rySu=VX3BVZ!o4a}$DneMtwR;F%At3LQxP zS{HQTTJ&$;E%dkkK~=o{Izh?N!e?cjFir)S?++WPtaXFv`zTMM{N0LF45~a^O7HXI z{sIH2QXMPa3gw=dgFE&e*JIOuL0*v^Zu@|vFwk+R-e3^??G(o&CI&e@|{Z{3SH<;llPhsgdFQ`)yYW)km?w44gD)> zV|7Z0CUsE^MJp=widrQC_1qS9qDF`!nYBEpTB+Hk@EONhj6xpYRr!MaiWcUK=tm6l zvx*V!Nd1Rj-iiJ?6 z3W6LXKSLeJ^!BrWeI1Mc89Bk|`C$iYW_4WDOt&^t8(pPD_-ghM8y&d;4Fp@q{47XdO~phg3o%hiq~K~MA+%15 zHiuIrF^n~GpqWTF!zz{#wP%?5=GDgRlE%`%3m9^yG&>fV4s0tyFn4H$<+ijZ zGS5Cv1OPl$b*{-^I`u}vPHhrY@_bdCKL7&-1OH8Kxt62NQ)xSh?!0`7SNqqReO@P| ztDH%;P*-QUoXBCyb$gKz>hh?HHA|FHOE8?w(}SbgUTJ-GB{iI9*Za#a^dc96EsU>3 zA;vlv_LH#W?jUw`qwpRwWpAn8S2FH@0=-83u)m(6Yowxk_aAs1cu%-fVCG29yiA?% zIzx#9HUt;}2ml}!Ap`&4&NV*pHqQYSXUJg+UC9LkTil&_0vikf3JDMa6=%p{ z3SG$-NDu#ZV<c3q#W!hEN%veD zs`a|`LvJ*sRPsxSLQ~N77LmBr1uWAd;|9!A-Bdj|3QuCv$DFj?u+FNl4r~;RQv@GT z!diUV>|}M7M6YWlmzUmEzVJ=^C6%N+Z+r7$XJmRAxli#6vGHl{GW&T{`yFgBLY*|> z6pxhUOLX8x)UTeM)I^4YnEct)qE?d#_vvcn1v-J>8eyWnpqp1Qs?0$hGjJn)nu`DK zr3=@;<6m)5nQsrYC|ISs79ax0a#poFO}wW)pnR^3d=_2ef=!V$JRqgSiDG2vSfC#! zcg5{(#f;6Q_H_z9osY_}5%>Je>5H3NLs@fuc@6{pE^TOzVZfsUsyx@?1MBo5EbMI{ zj*94Cm6Ur&Y&=U1WIBmuUU%(k7mm0*QiSXxd2y83oSu76Gnt2ZqSgh~`%mVpM)G