Skip to content

Commit 95ffc20

Browse files
authored
Merge pull request #691 from jeremyje/winver
Windows Server 20H2 and 2004 support, configurable base layer versions.
2 parents 2014365 + 0201e8b commit 95ffc20

File tree

3 files changed

+39
-18
lines changed

3 files changed

+39
-18
lines changed

Dockerfile.Windows

+1-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
# limitations under the License.
1414

1515
ARG BASE_IMAGE
16-
ARG BASE_IMAGE_TAG
1716
FROM --platform=$BUILDPLATFORM golang:1.13.4 AS builder
1817

1918
ARG TARGETPLATFORM
@@ -23,7 +22,7 @@ WORKDIR /code
2322
ADD . /code/
2423
RUN cd /code/ && GOARCH=$(echo $TARGETPLATFORM | cut -f2 -d '/') GCE_PD_CSI_STAGING_VERSION=${STAGINGVERSION} make gce-pd-driver-windows
2524

26-
FROM mcr.microsoft.com/windows/${BASE_IMAGE}:${BASE_IMAGE_TAG}
25+
FROM ${BASE_IMAGE}
2726
LABEL description="PD CSI driver"
2827
COPY --from=builder /code/bin/gce-pd-csi-driver.exe /gce-pd-csi-driver.exe
2928

Makefile

+30-10
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,19 @@ DRIVERWINDOWSBINARY=${DRIVERBINARY}.exe
2626

2727
DOCKER=DOCKER_CLI_EXPERIMENTAL=enabled docker
2828

29+
BASE_IMAGE_LTSC2019=mcr.microsoft.com/windows/servercore:ltsc2019
30+
BASE_IMAGE_1909=mcr.microsoft.com/windows/servercore:1909
31+
BASE_IMAGE_2004=mcr.microsoft.com/windows/servercore:2004
32+
BASE_IMAGE_20H2=mcr.microsoft.com/windows/servercore:20H2
33+
34+
# Both arrays MUST be index aligned.
35+
WINDOWS_IMAGE_TAGS=ltsc2019 1909 2004 20H2
36+
WINDOWS_BASE_IMAGES=$(BASE_IMAGE_LTSC2019) $(BASE_IMAGE_1909) $(BASE_IMAGE_2004) $(BASE_IMAGE_20H2)
37+
2938
all: gce-pd-driver gce-pd-driver-windows
3039
gce-pd-driver:
3140
mkdir -p bin
32-
go build -mod=vendor -ldflags "-X main.version=${STAGINGVERSION}" -o bin/${DRIVERBINARY} ./cmd/gce-pd-csi-driver/
41+
go build -mod=vendor -ldflags "-X main.version=$(STAGINGVERSION)" -o bin/${DRIVERBINARY} ./cmd/gce-pd-csi-driver/
3342

3443
gce-pd-driver-windows:
3544
mkdir -p bin
@@ -40,30 +49,41 @@ build-container: require-GCE_PD_CSI_STAGING_IMAGE
4049

4150
build-and-push-windows-container-ltsc2019: require-GCE_PD_CSI_STAGING_IMAGE init-buildx
4251
$(DOCKER) buildx build --file=Dockerfile.Windows --platform=windows \
43-
-t $(STAGINGIMAGE)-ltsc2019:$(STAGINGVERSION) --build-arg BASE_IMAGE=servercore \
44-
--build-arg BASE_IMAGE_TAG=ltsc2019 \
52+
-t $(STAGINGIMAGE):$(STAGINGVERSION)_ltsc2019 \
53+
--build-arg BASE_IMAGE=$(BASE_IMAGE_LTSC2019) \
4554
--build-arg STAGINGVERSION=$(STAGINGVERSION) --push .
4655

4756
build-and-push-windows-container-1909: require-GCE_PD_CSI_STAGING_IMAGE init-buildx
4857
$(DOCKER) buildx build --file=Dockerfile.Windows --platform=windows \
49-
-t $(STAGINGIMAGE)-1909:$(STAGINGVERSION) --build-arg BASE_IMAGE=servercore \
50-
--build-arg BASE_IMAGE_TAG=1909 \
58+
-t $(STAGINGIMAGE):$(STAGINGVERSION)_1909 \
59+
--build-arg BASE_IMAGE=$(BASE_IMAGE_1909) \
60+
--build-arg STAGINGVERSION=$(STAGINGVERSION) --push .
61+
62+
build-and-push-windows-container-2004: require-GCE_PD_CSI_STAGING_IMAGE init-buildx
63+
$(DOCKER) buildx build --file=Dockerfile.Windows --platform=windows \
64+
-t $(STAGINGIMAGE):$(STAGINGVERSION)_2004 \
65+
--build-arg BASE_IMAGE=$(BASE_IMAGE_2004) \
5166
--build-arg STAGINGVERSION=$(STAGINGVERSION) --push .
5267

53-
build-and-push-multi-arch: build-and-push-container-linux build-and-push-windows-container-ltsc2019 build-and-push-windows-container-1909
54-
$(DOCKER) manifest create --amend $(STAGINGIMAGE):$(STAGINGVERSION) ${STAGINGIMAGE}-linux:${STAGINGVERSION} ${STAGINGIMAGE}-1909:${STAGINGVERSION} ${STAGINGIMAGE}-ltsc2019:${STAGINGVERSION}
55-
STAGINGIMAGE=${STAGINGIMAGE} STAGINGVERSION=${STAGINGVERSION} ./manifest_osversion.sh
68+
build-and-push-windows-container-20H2: require-GCE_PD_CSI_STAGING_IMAGE init-buildx
69+
$(DOCKER) buildx build --file=Dockerfile.Windows --platform=windows \
70+
-t $(STAGINGIMAGE):$(STAGINGVERSION)_20H2 \
71+
--build-arg BASE_IMAGE=$(BASE_IMAGE_20H2) \
72+
--build-arg STAGINGVERSION=$(STAGINGVERSION) --push .
73+
74+
build-and-push-multi-arch: build-and-push-container-linux build-and-push-windows-container-ltsc2019 build-and-push-windows-container-1909 build-and-push-windows-container-2004 build-and-push-windows-container-20H2
75+
$(DOCKER) manifest create --amend $(STAGINGIMAGE):$(STAGINGVERSION) $(STAGINGIMAGE):$(STAGINGVERSION)_linux $(STAGINGIMAGE):$(STAGINGVERSION)_20H2 $(STAGINGIMAGE):$(STAGINGVERSION)_2004 $(STAGINGIMAGE):$(STAGINGVERSION)_1909 $(STAGINGIMAGE):$(STAGINGVERSION)_ltsc2019
76+
STAGINGIMAGE="$(STAGINGIMAGE)" STAGINGVERSION="$(STAGINGVERSION)" WINDOWS_IMAGE_TAGS="$(WINDOWS_IMAGE_TAGS)" WINDOWS_BASE_IMAGES="$(WINDOWS_BASE_IMAGES)" ./manifest_osversion.sh
5677
$(DOCKER) manifest push -p $(STAGINGIMAGE):$(STAGINGVERSION)
5778

5879
push-container: build-container
5980
gcloud docker -- push $(STAGINGIMAGE):$(STAGINGVERSION)
6081

6182
build-and-push-container-linux: require-GCE_PD_CSI_STAGING_IMAGE init-buildx
6283
$(DOCKER) buildx build --platform=linux \
63-
-t $(STAGINGIMAGE)-linux:$(STAGINGVERSION) \
84+
-t $(STAGINGIMAGE):$(STAGINGVERSION)_linux \
6485
--build-arg TAG=$(STAGINGVERSION) --push .
6586

66-
6787
test-sanity: gce-pd-driver
6888
go test -mod=vendor --v -timeout 30s sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/test/sanity -run ^TestSanity$
6989

manifest_osversion.sh

+8-6
Original file line numberDiff line numberDiff line change
@@ -6,26 +6,28 @@
66
# replace the following with annotation approach. https://github.com/docker/cli/pull/2578
77

88
export DOCKER_CLI_EXPERIMENTAL=enabled
9-
_WINDOWS_VERSIONS="1909 ltsc2019"
9+
_WINDOWS_VERSIONS="20H2 2004 1909 ltsc2019"
1010
BASE="mcr.microsoft.com/windows/servercore"
1111

12-
IFS=', ' read -r -a osversions <<< "$_WINDOWS_VERSIONS"
12+
IFS=', ' read -r -a imagetags <<< "$WINDOWS_IMAGE_TAGS"
13+
IFS=', ' read -r -a baseimages <<< "$WINDOWS_BASE_IMAGES"
1314
MANIFEST_TAG=${STAGINGIMAGE}:${STAGINGVERSION}
1415

1516
# translate from image tag to docker manifest foler format
1617
# e.g., gcr.io_k8s-staging-csi_gce-pd-windows-v2
1718
manifest_folder=$(echo "${MANIFEST_TAG}" | sed "s|/|_|g" | sed "s/:/-/")
1819
echo ${manifest_folder}
19-
echo ${#osversions[@]}
20+
echo ${#imagetags[@]}
21+
echo ${#baseimages[@]}
2022

21-
for ((i=0;i<${#osversions[@]};++i)); do
22-
BASEIMAGE="${BASE}:${osversions[i]}"
23+
for ((i=0;i<${#imagetags[@]};++i)); do
24+
BASEIMAGE="${baseimages[i]}"
2325
echo $BASEIIMAGE
2426

2527
full_version=$(docker manifest inspect ${BASEIMAGE} | grep "os.version" | head -n 1 | awk '{print $2}') || true
2628
echo $full_version
2729

28-
IMAGETAG=${STAGINGIMAGE}-${osversions[i]}:${STAGINGVERSION}
30+
IMAGETAG=${STAGINGIMAGE}:${STAGINGVERSION}_${imagetags[i]}
2931
image_folder=$(echo "${IMAGETAG}" | sed "s|/|_|g" | sed "s/:/-/")
3032
echo ${manifest_folder}
3133

0 commit comments

Comments
 (0)