diff --git a/.drone.yml b/.drone.yml index d151ee3b86d6ff535b9134a915e26814f7f4795f..c8a1d9a10bba09084a022785f844b2bba1af5160 100644 --- a/.drone.yml +++ b/.drone.yml @@ -101,7 +101,6 @@ node: steps: - name: build - failure: ignore image: rancher/dapper:v0.5.8 commands: - dapper ci @@ -110,7 +109,6 @@ steps: path: /var/run/docker.sock - name: upload-artifacts - failure: ignore image: rancher/drone-images:github-release-s390x settings: api_key: @@ -132,7 +130,6 @@ steps: - tag - name: push-controller - failure: ignore image: rancher/drone-images:docker-s390x volumes: - name: docker @@ -250,71 +247,6 @@ volumes: host: path: /var/run/docker.sock ---- -kind: pipeline -name: arm - -platform: - os: linux - arch: arm - -steps: -- name: build - image: rancher/dapper:v0.5.0 - commands: - - dapper ci - volumes: - - name: docker - path: /var/run/docker.sock - -- name: upload-artifacts - image: plugins/github-release - settings: - api_key: - from_secret: github_token - prerelease: true - checksum: - - sha256 - checksum_file: CHECKSUMsum-arm.txt - checksum_flatten: true - files: - - "dist/artifacts/*" - when: - instance: - - drone-publish.rancher.io - ref: - - refs/head/master - - refs/tags/* - event: - - tag - -- name: push-controller - image: plugins/docker - settings: - dockerfile: package/Dockerfile - build_args: - - ARCH=arm - - TAG=${DRONE_TAG}-arm - password: - from_secret: docker_password - repo: "rancher/system-upgrade-controller" - tag: "${DRONE_TAG}-arm" - username: - from_secret: docker_username - when: - instance: - - drone-publish.rancher.io - ref: - - refs/head/master - - refs/tags/* - event: - - tag - -volumes: -- name: docker - host: - path: /var/run/docker.sock - --- kind: pipeline name: manifest @@ -334,7 +266,6 @@ steps: platforms: - linux/amd64 - linux/arm64 - - linux/arm - linux/s390x target: "rancher/system-upgrade-controller:${DRONE_TAG}" template: "rancher/system-upgrade-controller:${DRONE_TAG}-ARCH" @@ -372,7 +303,6 @@ depends_on: - amd64 - s390x - arm64 -- arm --- kind: pipeline @@ -387,3 +317,4 @@ steps: when: instance: - drone-publish.rancher.io +--- diff --git a/Dockerfile.dapper b/Dockerfile.dapper index b0bdc1a705424ab98f0597d570219e1631a176b9..ccbb29302d40b4b6bdc55a341e8b1457ecaae441 100644 --- a/Dockerfile.dapper +++ b/Dockerfile.dapper @@ -1,7 +1,7 @@ ARG KUBECTL=rancher/kubectl:v1.21.9 FROM ${KUBECTL} AS kubectl -FROM golang:1.16-alpine3.14 +FROM registry.suse.com/bci/golang:1.17-11.33 COPY --from=kubectl /bin/kubectl /usr/local/bin/kubectl # COPY --from=sonobuoy /sonobuoy /usr/local/bin/sonobuoy @@ -9,7 +9,12 @@ COPY --from=kubectl /bin/kubectl /usr/local/bin/kubectl ARG DAPPER_HOST_ARCH ENV ARCH $DAPPER_HOST_ARCH -RUN apk -U add coreutils bash expect git gcc jq musl-dev docker docker-compose vim less file curl wget ca-certificates iproute2 +RUN zypper -n install expect git jq docker vim less file curl wget iproute2 gawk +# Manual install of docker-compose, only needed for e2e tests on amd64 +RUN if [ "${ARCH}" == "amd64" ]; then \ + curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-Linux-x86_64" -o /usr/local/bin/docker-compose && \ + chmod +x /usr/local/bin/docker-compose; \ + fi RUN go install github.com/mgechev/revive@v1.1.1 && \ rm -rf /go/src /go/pkg RUN go install golang.org/x/tools/cmd/goimports@latest && \ diff --git a/README.md b/README.md index 57f4e6c5041821fd47ac8975203a75d2d56397c0..8b864ea733d855fbed31350aec03d89ef6138b19 100644 --- a/README.md +++ b/README.md @@ -113,7 +113,7 @@ spec: tolerations: - {key: kubernetes.io/arch, effect: NoSchedule, operator: Equal, value: amd64} - {key: kubernetes.io/arch, effect: NoSchedule, operator: Equal, value: arm64} - - {key: kubernetes.io/arch, effect: NoSchedule, operator: Equal, value: arm} + - {key: kubernetes.io/arch, effect: NoSchedule, operator: Equal, value: s390x} # The prepare init container, if specified, is run before cordon/drain which is run before the upgrade container. # Shares the same format as the `upgrade` container. diff --git a/e2e/cluster/local/images/k3s/Dockerfile b/e2e/cluster/local/images/k3s/Dockerfile index 3b7aa77f7ae73d540e10ee75ce0c97ab728a566a..490ef80163e6f4e3a05588141bc352eafa0b037c 100644 --- a/e2e/cluster/local/images/k3s/Dockerfile +++ b/e2e/cluster/local/images/k3s/Dockerfile @@ -1,12 +1,11 @@ # Install the all-in-one binary so we can copy our run-time images into the image # which helps avoid pulling them when running e2e tests. -ARG ALPINE="library/alpine:3.14" -FROM ${ALPINE} AS k3s +ARG SLES="registry.suse.com/suse/sle15:15.3" +FROM ${SLES} AS k3s ARG ARCH ARG K3S_VERSION="v1.21.9+k3s1" RUN set -x \ - && apk --no-cache add \ - bash \ + && zypper -n in \ ca-certificates \ curl \ && if [ "${ARCH?required}" != "amd64" ]; then \ diff --git a/e2e/cluster/local/scripts/cluster-prepare b/e2e/cluster/local/scripts/cluster-prepare index 161043300f69585492ce1620ae9770cedc02a650..fa13800757d283f007b54802cd9ea5e7fbf3c2c8 100755 --- a/e2e/cluster/local/scripts/cluster-prepare +++ b/e2e/cluster/local/scripts/cluster-prepare @@ -4,7 +4,7 @@ set -e : "${ARCH?required}" : "${DIST?required}" -: "${ALPINE_TAG:=3.14}" +: "${SLES_TAG:=15.3}" : "${KUBECTL_TAG:=v1.21.9}" : "${SONOBUOY_TAG:=v0.56.2}" @@ -15,8 +15,8 @@ docker-image-save() { echo "Tagging '$1:$2' as '$1:latest' ..." docker image tag "$1:$2" "$1:latest" - echo "Saving '$1' images to '$(dirname $0)/../images/k3s/scratch/${1/\//-}-${ARCH}.tar' ..." - docker image save --output "$(dirname $0)/../images/k3s/scratch/${1/\//-}-${ARCH}.tar" "$1:$2" "$1:latest" + echo "Saving '$1' images to '$(dirname $0)/../images/k3s/scratch/${1//\//-}-${ARCH}.tar' ..." + docker image save --output "$(dirname $0)/../images/k3s/scratch/${1//\//-}-${ARCH}.tar" "$1:$2" "$1:latest" } rm -rf $(dirname $0)/../images/*/scratch/* @@ -24,6 +24,6 @@ rm -rf $(dirname $0)/../images/*/scratch/* cp -vf "${DIST}/system-upgrade-controller-${ARCH}.tar" $(dirname $0)/../images/k3s/scratch/ cp -vf "${DIST}/system-upgrade-controller-e2e-tests-${ARCH}.tar" $(dirname $0)/../images/k3s/scratch/ -docker-image-save "library/alpine" "${ALPINE_TAG}" +docker-image-save "registry.suse.com/suse/sle15" "${SLES_TAG}" docker-image-save "rancher/kubectl" "${KUBECTL_TAG}" docker-image-save "sonobuoy/sonobuoy" "${SONOBUOY_TAG}" diff --git a/go.mod b/go.mod index d9c96062d2cddf98a5a0eb455f66863d250242f5..e1e6debe6203796a67de5079d8141ac343144257 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/rancher/system-upgrade-controller go 1.16 require ( - github.com/docker/distribution v2.8.0+incompatible + github.com/docker/distribution v2.8.1+incompatible github.com/onsi/ginkgo v1.16.4 github.com/onsi/gomega v1.16.0 github.com/rancher/lasso v0.0.0-20210616224652-fc3ebd901c08 @@ -11,6 +11,7 @@ require ( github.com/rancher/wrangler v0.8.8 github.com/sirupsen/logrus v1.4.2 github.com/urfave/cli v1.22.2 + golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 // indirect k8s.io/api v0.18.18 k8s.io/apimachinery v0.18.18 k8s.io/client-go v0.18.18 @@ -19,6 +20,7 @@ require ( ) replace ( + github.com/docker/distribution => github.com/distribution/distribution v2.8.1+incompatible github.com/rancher/system-upgrade-controller/pkg/apis => ./pkg/apis k8s.io/api => github.com/k3s-io/kubernetes/staging/src/k8s.io/api v1.18.20-k3s1 k8s.io/apiextensions-apiserver => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiextensions-apiserver v1.18.20-k3s1 diff --git a/go.sum b/go.sum index 69002354df8ffce46a1864ee3b5a1bad51ccc0bd..c6ce9e3b49e5eef11476c15be9936afd99fc5446 100644 --- a/go.sum +++ b/go.sum @@ -112,10 +112,9 @@ github.com/daviddengcn/go-colortext v0.0.0-20160507010035-511bcaf42ccd/go.mod h1 github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/distribution/distribution v2.8.1+incompatible h1:8iXUoOqRPx30bhzIEPUmNIqlmBlWdrieW1bqr6LrX30= +github.com/distribution/distribution v2.8.1+incompatible/go.mod h1:EgLm2NgWtdKgzF9NpMzUKgzmR7AMmb0VQi2B+ZzDRjc= github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= -github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/distribution v2.8.0+incompatible h1:l9EaZDICImO1ngI+uTifW+ZYvvz7fKISBAKpg+MbWbY= -github.com/docker/distribution v2.8.0+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.3.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= @@ -674,8 +673,9 @@ golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 h1:It14KIkyBFYkHkwZ7k45minvA9aorojkyjGk9KJ5B/w= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 h1:kUhD7nTDoI3fVd9G4ORWrbV5NY0liEs/Jg2pv5f+bBA= +golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -726,8 +726,9 @@ golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781 h1:DzZ89McO9/gWPsQXS/FVKAlG02ZjaQ6AlZRBimEYOd0= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 h1:CIJ76btIcR3eFI5EgSo6k1qKw9KJexJuRLI9G7Hp5wE= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -776,8 +777,9 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da h1:b3NXsE2LusjYGGjL5bxEVZZORm/YEFFrWFjR8eFrw/c= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1 h1:SrN+KX8Art/Sf4HNj6Zcz06G7VEz+7w9tdXTPOZ7+l4= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -787,8 +789,9 @@ golang.org/x/text v0.3.1-0.20171227012246-e19ae1496984/go.mod h1:NqM8EUOU14njkJ3 golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ= diff --git a/package/Dockerfile b/package/Dockerfile index 527b45a1a5eff321a2a5af1142b87241c0849c78..c0b917b4b5006d3152ed871986ce7a0683929d20 100644 --- a/package/Dockerfile +++ b/package/Dockerfile @@ -1,27 +1,22 @@ -ARG ALPINE=alpine:3.14 -ARG GOLANG=golang:1.16-alpine3.14 +ARG SLES=registry.suse.com/suse/sle15:15.3 +ARG GOLANG=registry.suse.com/bci/golang:1.17-11.33 FROM ${GOLANG} AS e2e-ginkgo ENV GOBIN=/bin -RUN set -x \ - && apk add --no-cache \ - ca-certificates \ - git \ - && go install github.com/onsi/ginkgo/ginkgo@v1.16.4 +RUN go install github.com/onsi/ginkgo/ginkgo@v1.16.4 -FROM ${ALPINE} AS e2e-tests +FROM ${SLES} AS e2e-tests ARG ARCH ARG REPO=rancher ARG TAG ENV SYSTEM_UPGRADE_CONTROLLER_IMAGE=${REPO}/system-upgrade-controller:${TAG} -RUN set -x \ - && apk add --no-cache \ - bash COPY --from=e2e-ginkgo /bin/ginkgo /bin/ginkgo COPY dist/artifacts/system-upgrade-controller.test-${ARCH} /bin/system-upgrade-controller.test COPY e2e/plugin/run.sh /run.sh RUN set -x \ && chmod +x /run.sh +RUN set -x \ + && zypper -n in tar gzip ENTRYPOINT ["/run.sh"] FROM scratch AS controller diff --git a/pkg/apis/go.mod b/pkg/apis/go.mod index df075ba4d5313d95d7e22cd2bc45ae10d7c41ed2..3c42d675ee089c864633d49284b20286b5dabfdc 100644 --- a/pkg/apis/go.mod +++ b/pkg/apis/go.mod @@ -5,6 +5,9 @@ go 1.16 require ( github.com/rancher/wrangler v0.8.5 github.com/sirupsen/logrus v1.4.2 + golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 // indirect + golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1 // indirect + golang.org/x/text v0.3.7 // indirect k8s.io/api v0.18.18 k8s.io/apimachinery v0.18.18 ) diff --git a/pkg/apis/go.sum b/pkg/apis/go.sum index 0ea83245b59abee05ff4ff49537930c544dbf503..01c1ee5e25b7576cf5518d91ac547dacec0069c4 100644 --- a/pkg/apis/go.sum +++ b/pkg/apis/go.sum @@ -418,8 +418,9 @@ golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110 h1:qWPm9rbaAMKs8Bq/9LRpbMqxWRVUAQwMI9fVrssnTfw= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 h1:CIJ76btIcR3eFI5EgSo6k1qKw9KJexJuRLI9G7Hp5wE= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -451,16 +452,20 @@ golang.org/x/sys v0.0.0-20191002063906-3421d5a6bb1c/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68 h1:nxC68pudNYkKU6jWhgrqdreuFiOQWj1Fs7T3VrH4Pjw= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1 h1:SrN+KX8Art/Sf4HNj6Zcz06G7VEz+7w9tdXTPOZ7+l4= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20171227012246-e19ae1496984/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= diff --git a/pkg/apis/upgrade.cattle.io/v1/types.go b/pkg/apis/upgrade.cattle.io/v1/types.go index 3df0e57e14a6524e49819bf68b2130f72177b122..ca6c5040179677ca5003297d9aa43833b1ff6efd 100644 --- a/pkg/apis/upgrade.cattle.io/v1/types.go +++ b/pkg/apis/upgrade.cattle.io/v1/types.go @@ -62,6 +62,13 @@ type ContainerSpec struct { Args []string `json:"args,omitempty"` Env []corev1.EnvVar `json:"envs,omitempty"` EnvFrom []corev1.EnvFromSource `json:"envFrom,omitempty"` + Volumes []VolumeSpec `json:"volumes,omitempty"` +} + +type VolumeSpec struct { + Name string `json:"name,omitempty"` + Source string `json:"source,omitempty"` + Destination string `json:"destination,omitempty"` } // DrainSpec encapsulates `kubectl drain` parameters minus node/pod selectors. diff --git a/pkg/apis/upgrade.cattle.io/v1/zz_generated_deepcopy.go b/pkg/apis/upgrade.cattle.io/v1/zz_generated_deepcopy.go index 4058839b91b4e54d3f0ca69182a0d5d8d3ea7fc0..aef229d4db48788a4f3ef8486918c4a4cc065752 100644 --- a/pkg/apis/upgrade.cattle.io/v1/zz_generated_deepcopy.go +++ b/pkg/apis/upgrade.cattle.io/v1/zz_generated_deepcopy.go @@ -1,3 +1,4 @@ +//go:build !ignore_autogenerated // +build !ignore_autogenerated /* @@ -56,6 +57,11 @@ func (in *ContainerSpec) DeepCopyInto(out *ContainerSpec) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.Volumes != nil { + in, out := &in.Volumes, &out.Volumes + *out = make([]VolumeSpec, len(*in)) + copy(*out, *in) + } return } @@ -255,3 +261,19 @@ func (in *SecretSpec) DeepCopy() *SecretSpec { in.DeepCopyInto(out) return out } + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *VolumeSpec) DeepCopyInto(out *VolumeSpec) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VolumeSpec. +func (in *VolumeSpec) DeepCopy() *VolumeSpec { + if in == nil { + return nil + } + out := new(VolumeSpec) + in.DeepCopyInto(out) + return out +} diff --git a/pkg/upgrade/container/container.go b/pkg/upgrade/container/container.go index 2d70da3802e1f9c19581d19df1cfa9750c424e16..196f1ec6cb88cdf69406c217e81459135956cf74 100644 --- a/pkg/upgrade/container/container.go +++ b/pkg/upgrade/container/container.go @@ -76,6 +76,17 @@ func WithPlanEnvironment(planName string, planStatus upgradeapiv1.PlanStatus) Op } } +func WithVolumes(volumes []upgradeapiv1.VolumeSpec) Option { + return func(container *corev1.Container) { + for _, v := range volumes { + container.VolumeMounts = append(container.VolumeMounts, corev1.VolumeMount{ + Name: v.Name, + MountPath: v.Destination, + }) + } + } +} + func New(name string, spec upgradeapiv1.ContainerSpec, opt ...Option) corev1.Container { container := corev1.Container{ Name: name, @@ -110,6 +121,7 @@ func New(name string, spec upgradeapiv1.ContainerSpec, opt ...Option) corev1.Con }}, spec.Env...), EnvFrom: spec.EnvFrom, } + for _, fn := range opt { fn(&container) } diff --git a/pkg/upgrade/job/job.go b/pkg/upgrade/job/job.go index 93b347595f4afab527cef5a630cc4941d6280695..2e1050fc73d593272ab936a4e1d4099ee3a3119b 100644 --- a/pkg/upgrade/job/job.go +++ b/pkg/upgrade/job/job.go @@ -212,6 +212,18 @@ func New(plan *upgradeapiv1.Plan, node *corev1.Node, controllerName string) *bat }) } + // add volumes from upgrade plan + for _, v := range plan.Spec.Upgrade.Volumes { + podTemplate.Spec.Volumes = append(podTemplate.Spec.Volumes, corev1.Volume{ + Name: v.Name, + VolumeSource: corev1.VolumeSource{ + HostPath: &corev1.HostPathVolumeSource{ + Path: v.Source, + }, + }, + }) + } + // first, we prepare if plan.Spec.Prepare != nil { podTemplate.Spec.InitContainers = append(podTemplate.Spec.InitContainers, @@ -220,6 +232,7 @@ func New(plan *upgradeapiv1.Plan, node *corev1.Node, controllerName string) *bat upgradectr.WithSecrets(plan.Spec.Secrets), upgradectr.WithPlanEnvironment(plan.Name, plan.Status), upgradectr.WithImagePullPolicy(ImagePullPolicy), + upgradectr.WithVolumes(plan.Spec.Upgrade.Volumes), ), ) } @@ -260,6 +273,7 @@ func New(plan *upgradeapiv1.Plan, node *corev1.Node, controllerName string) *bat upgradectr.WithSecrets(plan.Spec.Secrets), upgradectr.WithPlanEnvironment(plan.Name, plan.Status), upgradectr.WithImagePullPolicy(ImagePullPolicy), + upgradectr.WithVolumes(plan.Spec.Upgrade.Volumes), ), ) } else if cordon { @@ -271,6 +285,7 @@ func New(plan *upgradeapiv1.Plan, node *corev1.Node, controllerName string) *bat upgradectr.WithSecrets(plan.Spec.Secrets), upgradectr.WithPlanEnvironment(plan.Name, plan.Status), upgradectr.WithImagePullPolicy(ImagePullPolicy), + upgradectr.WithVolumes(plan.Spec.Upgrade.Volumes), ), ) } @@ -290,6 +305,7 @@ func New(plan *upgradeapiv1.Plan, node *corev1.Node, controllerName string) *bat upgradectr.WithSecrets(plan.Spec.Secrets), upgradectr.WithPlanEnvironment(plan.Name, plan.Status), upgradectr.WithImagePullPolicy(ImagePullPolicy), + upgradectr.WithVolumes(plan.Spec.Upgrade.Volumes), ), }