diff --git a/Makefile b/Makefile index 881ea2c91e..b42eb51ad4 100644 --- a/Makefile +++ b/Makefile @@ -798,8 +798,17 @@ bazel-protokube-export: tools/sha1 ${BAZELIMAGES}/protokube.tar.gz ${BAZELIMAGES}/protokube.tar.gz.sha1 tools/sha256 ${BAZELIMAGES}/protokube.tar.gz ${BAZELIMAGES}/protokube.tar.gz.sha256 +.PHONY: bazel-kops-controller-export +bazel-kops-controller-export: + mkdir -p ${BAZELIMAGES} + DOCKER_REGISTRY="" DOCKER_IMAGE_PREFIX="kope/" KOPS_CONTROLLER_TAG=${KOPS_CONTROLLER_TAG} bazel build --platforms=@io_bazel_rules_go//go/toolchain:linux_amd64 //cmd/kops-controller:image-bundle.tar + cp -fp bazel-bin/cmd/kops-controller/image-bundle.tar ${BAZELIMAGES}/kops-controller.tar + gzip --force --fast ${BAZELIMAGES}/kops-controller.tar + tools/sha1 ${BAZELIMAGES}/kops-controller.tar.gz ${BAZELIMAGES}/kops-controller.tar.gz.sha1 + tools/sha256 ${BAZELIMAGES}/kops-controller.tar.gz ${BAZELIMAGES}/kops-controller.tar.gz.sha256 + .PHONY: bazel-version-dist -bazel-version-dist: bazel-crossbuild-nodeup bazel-crossbuild-kops bazel-protokube-export bazel-utils-dist +bazel-version-dist: bazel-crossbuild-nodeup bazel-crossbuild-kops bazel-kops-controller-export bazel-protokube-export bazel-utils-dist rm -rf ${BAZELUPLOAD} mkdir -p ${BAZELUPLOAD}/kops/${VERSION}/linux/amd64/ mkdir -p ${BAZELUPLOAD}/kops/${VERSION}/darwin/amd64/ @@ -812,6 +821,9 @@ bazel-version-dist: bazel-crossbuild-nodeup bazel-crossbuild-kops bazel-protokub cp ${BAZELIMAGES}/protokube.tar.gz ${BAZELUPLOAD}/kops/${VERSION}/images/protokube.tar.gz cp ${BAZELIMAGES}/protokube.tar.gz.sha1 ${BAZELUPLOAD}/kops/${VERSION}/images/protokube.tar.gz.sha1 cp ${BAZELIMAGES}/protokube.tar.gz.sha256 ${BAZELUPLOAD}/kops/${VERSION}/images/protokube.tar.gz.sha256 + cp ${BAZELIMAGES}/kops-controller.tar.gz ${BAZELUPLOAD}/kops/${VERSION}/images/kops-controller.tar.gz + cp ${BAZELIMAGES}/kops-controller.tar.gz.sha1 ${BAZELUPLOAD}/kops/${VERSION}/images/kops-controller.tar.gz.sha1 + cp ${BAZELIMAGES}/kops-controller.tar.gz.sha256 ${BAZELUPLOAD}/kops/${VERSION}/images/kops-controller.tar.gz.sha256 cp bazel-bin/cmd/kops/linux_amd64_pure_stripped/kops ${BAZELUPLOAD}/kops/${VERSION}/linux/amd64/kops tools/sha1 ${BAZELUPLOAD}/kops/${VERSION}/linux/amd64/kops ${BAZELUPLOAD}/kops/${VERSION}/linux/amd64/kops.sha1 tools/sha256 ${BAZELUPLOAD}/kops/${VERSION}/linux/amd64/kops ${BAZELUPLOAD}/kops/${VERSION}/linux/amd64/kops.sha256 @@ -877,6 +889,15 @@ dev-upload-protokube: bazel-protokube-export # Upload kops to GCS cp -fp ${BAZELIMAGES}/protokube.tar.gz.sha256 ${BAZELUPLOAD}/kops/${VERSION}/images/protokube.tar.gz.sha256 ${UPLOAD} ${BAZELUPLOAD}/ ${UPLOAD_DEST} +# dev-upload-kops-controller uploads kops-controller to GCS +.PHONY: dev-upload-kops-controller +dev-upload-kops-controller: bazel-kops-controller-export # Upload kops to GCS + mkdir -p ${BAZELUPLOAD}/kops/${VERSION}/images/ + cp -fp ${BAZELIMAGES}/kops-controller.tar.gz ${BAZELUPLOAD}/kops/${VERSION}/images/kops-controller.tar.gz + cp -fp ${BAZELIMAGES}/kops-controller.tar.gz.sha1 ${BAZELUPLOAD}/kops/${VERSION}/images/kops-controller.tar.gz.sha1 + cp -fp ${BAZELIMAGES}/kops-controller.tar.gz.sha256 ${BAZELUPLOAD}/kops/${VERSION}/images/kops-controller.tar.gz.sha256 + ${UPLOAD} ${BAZELUPLOAD}/ ${UPLOAD_DEST} + # dev-copy-utils copies utils from a recent release # We don't currently have a bazel build for them, and the build is pretty slow, but they change rarely. .PHONE: dev-copy-utils @@ -890,7 +911,7 @@ dev-copy-utils: # dev-upload does a faster build and uploads to GCS / S3 # It copies utils instead of building it .PHONY: dev-upload -dev-upload: dev-upload-nodeup dev-upload-protokube dev-copy-utils +dev-upload: dev-upload-nodeup dev-upload-kops-controller dev-upload-protokube dev-copy-utils echo "Done" .PHONY: crds diff --git a/cmd/kops-controller/BUILD.bazel b/cmd/kops-controller/BUILD.bazel index 19e0c19897..a4ca6d5a9a 100644 --- a/cmd/kops-controller/BUILD.bazel +++ b/cmd/kops-controller/BUILD.bazel @@ -30,6 +30,7 @@ load( "@io_bazel_rules_docker//container:container.bzl", "container_image", "container_push", + "container_bundle", ) container_image( @@ -50,3 +51,10 @@ container_push( repository = "{STABLE_DOCKER_IMAGE_PREFIX}kops-controller", tag = "{STABLE_KOPS_CONTROLLER_TAG}", ) + +container_bundle( + name = "image-bundle", + images = { + "{STABLE_DOCKER_IMAGE_PREFIX}kops-controller:{STABLE_KOPS_CONTROLLER_TAG}": "image", + }, +) diff --git a/upup/pkg/fi/cloudup/apply_cluster.go b/upup/pkg/fi/cloudup/apply_cluster.go index 0f6d40e34f..e96788bb14 100644 --- a/upup/pkg/fi/cloudup/apply_cluster.go +++ b/upup/pkg/fi/cloudup/apply_cluster.go @@ -1312,6 +1312,30 @@ func (c *ApplyClusterCmd) BuildNodeUpConfig(assetBuilder *assets.AssetBuilder, i } } + // `docker load` our images when using a KOPS_BASE_URL, so we + // don't need to push/pull from a registry + if os.Getenv("KOPS_BASE_URL") != "" { + for _, name := range []string{"kops-controller" /* TODO: "dns-controller" */} { + baseURL, err := url.Parse(os.Getenv("KOPS_BASE_URL")) + if err != nil { + return nil, err + } + + baseURL.Path = path.Join(baseURL.Path, "/images/"+name+".tar.gz") + + u, hash, err := assetBuilder.RemapFileAndSHA(baseURL) + if err != nil { + return nil, err + } + + image := &nodeup.Image{ + Sources: []string{u.String()}, + Hash: hash.Hex(), + } + images = append(images, image) + } + } + { u, hash, err := ProtokubeImageSource(assetBuilder) if err != nil {