diff --git a/cluster/images/provider-jet-equinix/Dockerfile b/cluster/images/provider-jet-equinix/Dockerfile index 8118eb6..d5ed290 100644 --- a/cluster/images/provider-jet-equinix/Dockerfile +++ b/cluster/images/provider-jet-equinix/Dockerfile @@ -1,9 +1,52 @@ -FROM gcr.io/distroless/static@sha256:1f580b0a1922c3e54ae15b0758b5747b260bd99d39d40c2edb3e7f6e2452298b +FROM BASEIMAGE +RUN apk --no-cache add ca-certificates bash ARG TARGETOS ARG TARGETARCH +ARG TINI_VERSION +ENV USER_ID=1001 + +# Setup Terraform environment + +## Provider-dependent configuration +ARG TERRAFORM_VERSION +ARG TERRAFORM_PROVIDER_SOURCE +ARG TERRAFORM_PROVIDER_VERSION +ARG TERRAFORM_PROVIDER_DOWNLOAD_NAME +ARG TERRAFORM_PROVIDER_DOWNLOAD_URL_PREFIX +ARG TERRAFORM_NATIVE_PROVIDER_BINARY +## End of - Provider-dependent configuration + +ENV PLUGIN_DIR /terraform/provider-mirror/registry.terraform.io/${TERRAFORM_PROVIDER_SOURCE}/${TERRAFORM_PROVIDER_VERSION}/${TARGETOS}_${TARGETARCH} +ENV TF_CLI_CONFIG_FILE /terraform/.terraformrc +ENV TF_FORK 0 + +RUN mkdir -p ${PLUGIN_DIR} + +ADD https://releases.hashicorp.com/terraform/${TERRAFORM_VERSION}/terraform_${TERRAFORM_VERSION}_${TARGETOS}_${TARGETARCH}.zip /tmp +ADD ${TERRAFORM_PROVIDER_DOWNLOAD_URL_PREFIX}/${TERRAFORM_PROVIDER_DOWNLOAD_NAME}_${TERRAFORM_PROVIDER_VERSION}_${TARGETOS}_${TARGETARCH}.zip /tmp + +ADD terraformrc.hcl ${TF_CLI_CONFIG_FILE} + +RUN unzip /tmp/terraform_${TERRAFORM_VERSION}_${TARGETOS}_${TARGETARCH}.zip -d /usr/local/bin \ + && chmod +x /usr/local/bin/terraform \ + && rm -f /tmp/terraform_${TERRAFORM_VERSION}_${TARGETOS}_${TARGETARCH}.zip \ + && unzip /tmp/${TERRAFORM_PROVIDER_DOWNLOAD_NAME}_${TERRAFORM_PROVIDER_VERSION}_${TARGETOS}_${TARGETARCH}.zip -d /tmp/ \ + && mv /tmp/${TERRAFORM_NATIVE_PROVIDER_BINARY} ${PLUGIN_DIR} \ + && chmod +x ${PLUGIN_DIR}/${TERRAFORM_NATIVE_PROVIDER_BINARY} \ + && rm -f /tmp/${TERRAFORM_PROVIDER_DOWNLOAD_NAME}_${TERRAFORM_PROVIDER_VERSION}_${TARGETOS}_${TARGETARCH}.zip \ + && chown -R ${USER_ID}:${USER_ID} /terraform +# End of - Setup Terraform environment ADD bin/$TARGETOS\_$TARGETARCH/provider /usr/local/bin/crossplane-equinix-provider -USER 65532 +# Provider controller needs these environment variable at runtime +ENV TERRAFORM_VERSION ${TERRAFORM_VERSION} +ENV TERRAFORM_PROVIDER_SOURCE ${TERRAFORM_PROVIDER_SOURCE} +ENV TERRAFORM_PROVIDER_VERSION ${TERRAFORM_PROVIDER_VERSION} +ENV TERRAFORM_NATIVE_PROVIDER_PATH ${PLUGIN_DIR}/${TERRAFORM_NATIVE_PROVIDER_BINARY} + +USER ${USER_ID} +EXPOSE 8080 + ENTRYPOINT ["crossplane-equinix-provider"] diff --git a/cluster/images/provider-jet-equinix/Makefile b/cluster/images/provider-jet-equinix/Makefile index 269cea4..0b6020b 100755 --- a/cluster/images/provider-jet-equinix/Makefile +++ b/cluster/images/provider-jet-equinix/Makefile @@ -1,13 +1,27 @@ # ==================================================================================== # Setup Project +PLATFORMS := linux_amd64 linux_arm64 include ../../../build/makelib/common.mk # ==================================================================================== # Options - +IMAGE = $(BUILD_REGISTRY)/provider-jet-equinix-controller-$(ARCH) include ../../../build/makelib/imagelight.mk +# OSBASEIMAGE = scratch +# OSBASEIMAGE = gcr.io/distroless/static@sha256:1f580b0a1922c3e54ae15b0758b5747b260bd99d39d40c2edb3e7f6e2452298b + +ifeq ($(origin OSBASEIMAGE),undefined) +OSBASE ?= alpine:3.13 +ifeq ($(TARGETARCH),$(filter $(TARGETARCH),amd64 ppc64le)) +OSBASEIMAGE = $(OSBASE) +else ifeq ($(TARGETARCH),arm64) +OSBASEIMAGE = arm64v8/$(OSBASE) +else +$(error unsupported architecture $(TARGETARCH)) +endif +endif # ==================================================================================== # Targets @@ -24,9 +38,20 @@ img.publish: img.build.shared: @$(INFO) docker build $(IMAGE) @cp Dockerfile $(IMAGE_TEMP_DIR) || $(FAIL) + @cp terraformrc.hcl $(IMAGE_TEMP_DIR) || $(FAIL) + @cp $(OUTPUT_DIR)/bin/$(OS)_$(ARCH)/provider $(IMAGE_TEMP_DIR) || $(FAIL) @cp -r $(OUTPUT_DIR)/bin/ $(IMAGE_TEMP_DIR)/bin || $(FAIL) + @cd $(IMAGE_TEMP_DIR) && $(SED_CMD) 's|BASEIMAGE|$(OSBASEIMAGE)|g' Dockerfile || $(FAIL) @docker buildx build $(BUILD_ARGS) \ --platform $(IMAGE_PLATFORMS) \ + --build-arg ARCH=$(ARCH) \ + --build-arg TINI_VERSION=$(TINI_VERSION) \ + --build-arg TERRAFORM_VERSION=$(TERRAFORM_VERSION) \ + --build-arg TERRAFORM_PROVIDER_SOURCE=$(TERRAFORM_PROVIDER_SOURCE) \ + --build-arg TERRAFORM_PROVIDER_VERSION=$(TERRAFORM_PROVIDER_VERSION) \ + --build-arg TERRAFORM_PROVIDER_DOWNLOAD_NAME=$(TERRAFORM_PROVIDER_DOWNLOAD_NAME) \ + --build-arg TERRAFORM_PROVIDER_DOWNLOAD_URL_PREFIX=$(TERRAFORM_PROVIDER_DOWNLOAD_URL_PREFIX) \ + --build-arg TERRAFORM_NATIVE_PROVIDER_BINARY=$(TERRAFORM_NATIVE_PROVIDER_BINARY) \ -t $(IMAGE) \ $(IMAGE_TEMP_DIR) || $(FAIL) @$(OK) docker build $(IMAGE) diff --git a/cluster/images/provider-jet-equinix/terraformrc.hcl b/cluster/images/provider-jet-equinix/terraformrc.hcl new file mode 100644 index 0000000..b146639 --- /dev/null +++ b/cluster/images/provider-jet-equinix/terraformrc.hcl @@ -0,0 +1,9 @@ +provider_installation { + filesystem_mirror { + path = "/terraform/provider-mirror" + include = ["*/*"] + } + direct { + exclude = ["*/*"] + } +} \ No newline at end of file