Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions experimental/docker-latest-tf/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
build/
26 changes: 26 additions & 0 deletions experimental/docker-latest-tf/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
FROM alpine:3.22 as builder

RUN ["apk", "add", "jq"]
RUN ["apk", "add", "bash"]

WORKDIR /build

COPY ./setup.sh /build/docker/setup.sh
COPY ./config.tfrc /app/config/config.tfrc

ARG ARCH
ARG CLI_VERSION=0.279.0
RUN /build/docker/setup.sh

# Start from a fresh base image, to remove any build artifacts and scripts.
FROM alpine:3.22

ENV DATABRICKS_TF_EXEC_PATH "/app/bin/terraform"
ENV DATABRICKS_TF_CLI_CONFIG_FILE "/app/config/config.tfrc"
ENV DATABRICKS_TF_VERSION "1.14.0"
ENV PATH="/app:${PATH}"

COPY --from=builder /app /app

ENTRYPOINT ["/app/databricks"]
CMD ["-h"]
45 changes: 45 additions & 0 deletions experimental/docker-latest-tf/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# Docker with Latest Terraform

Docker image using Terraform 1.14.0 and Databricks CLI v0.279.0.

## Build

```bash
./build.sh
```

Images are output to `build/` directory.

## Upload to GitHub Container Registry

```bash
# Login to ghcr.io
# Provision a token with write packages permissions
echo "GH_TOKEN" | docker login ghcr.io -u <username> --password-stdin

# Load and tag images
docker load -i build/cli-amd64.tar
docker load -i build/cli-arm64.tar

# Tag for registry
docker tag databricks-cli:amd64 ghcr.io/databricks/cli:latest-tf-amd64
docker tag databricks-cli:arm64 ghcr.io/databricks/cli:latest-tf-arm64

# Push
docker push ghcr.io/databricks/cli:<cli-version>-amd64-tf-<tf-version>-experimental
docker push ghcr.io/databricks/cli:<cli-version>-amd64-tf-<tf-version>-experimental


## Test

```bash
# Load the image
docker load -i build/cli-arm64.tar # or cli-amd64.tar

# Run a bundle deploy (mount your bundle directory and credentials)
docker run --rm \
-v ~/.databrickscfg:/root/.databrickscfg:ro \
-v /path/to/your/bundle:/bundle \
-w /bundle \
databricks-cli:arm64 bundle deploy
```
14 changes: 14 additions & 0 deletions experimental/docker-latest-tf/build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#!/bin/bash
set -euo pipefail

cd "$(dirname "$0")"

mkdir -p build

for arch in amd64 arm64; do
echo "Building for $arch..."
docker build --build-arg ARCH=$arch -t databricks-cli:$arch -f Dockerfile .
docker save databricks-cli:$arch -o build/cli-$arch.tar
done

echo "Done. Images saved to build/"
6 changes: 6 additions & 0 deletions experimental/docker-latest-tf/config.tfrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
provider_installation {
filesystem_mirror {
path = "/app/providers"
include = ["registry.terraform.io/databricks/databricks"]
}
}
30 changes: 30 additions & 0 deletions experimental/docker-latest-tf/setup.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#!/bin/bash
set -euo pipefail

if [ "$ARCH" != "amd64" ] && [ "$ARCH" != "arm64" ]; then
echo "Unsupported architecture: $ARCH"
exit 1
fi

# Download and install the Databricks CLI
mkdir -p /app
wget https://github.com/databricks/cli/releases/download/v${CLI_VERSION}/databricks_cli_${CLI_VERSION}_linux_${ARCH}.tar.gz -O cli.tar.gz
tar -xzf cli.tar.gz -C /app
rm cli.tar.gz

DATABRICKS_TF_VERSION="1.14.0"
DATABRICKS_TF_PROVIDER_VERSION=$(/app/databricks bundle debug terraform --output json | jq -r .terraform.providerVersion)

# Download the terraform binary
mkdir -p zip
wget https://releases.hashicorp.com/terraform/${DATABRICKS_TF_VERSION}/terraform_${DATABRICKS_TF_VERSION}_linux_${ARCH}.zip -O zip/terraform.zip

# Unzip the terraform binary.
unzip zip/terraform.zip -d zip/terraform
mkdir -p /app/bin
mv zip/terraform/terraform /app/bin/terraform

# Download the provider plugin
TF_PROVIDER_NAME=terraform-provider-databricks_${DATABRICKS_TF_PROVIDER_VERSION}_linux_${ARCH}.zip
mkdir -p /app/providers/registry.terraform.io/databricks/databricks
wget https://github.com/databricks/terraform-provider-databricks/releases/download/v${DATABRICKS_TF_PROVIDER_VERSION}/${TF_PROVIDER_NAME} -O /app/providers/registry.terraform.io/databricks/databricks/${TF_PROVIDER_NAME}