From 63942d9a9783360241fa82bf08d5d9eddc0aaf10 Mon Sep 17 00:00:00 2001 From: Adam Heath <doogie@brainfood.com> Date: Mon, 13 Jan 2025 15:15:54 -0600 Subject: [PATCH] Initial set of brainfood-tools docker image. --- .dockerignore | 1 + Dockerfile | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ entrypoint.sh | 25 +++++++++++++++++++++++++ 3 files changed, 105 insertions(+), 0 deletions(-) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100755 entrypoint.sh diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..3268211 --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +.*.sw? diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..fd8caac --- /dev/null +++ b/Dockerfile @@ -0,0 +1,79 @@ +FROM scratch AS helm-remote +ARG HELM_VERSION=3.16.4 +ADD https://get.helm.sh/helm-v${HELM_VERSION}-linux-amd64.tar.gz /srv/helm-linux-amd64.tar.gz + +FROM scratch AS helm-diff-remote +ARG HELM_DIFF_VERSION=3.5.0 +ADD https://github.com/databus23/helm-diff/releases/download/v${HELM_DIFF_VERSION}/helm-diff-linux-amd64.tgz /srv/helm-diff-linux-amd64.tgz + +FROM scratch AS helm-git-remote +ARG HELM_GIT_VERSION=1.3.0 +ADD https://github.com/aslafy-z/helm-git/archive/refs/tags/v${HELM_GIT_VERSION}.tar.gz /srv/helm-git.tar.gz + +FROM scratch AS helmfile-remote +ARG HELMFILE_VERSION=0.149.0 +ADD https://github.com/helmfile/helmfile/releases/download/v${HELMFILE_VERSION}/helmfile_${HELMFILE_VERSION}_linux_amd64.tar.gz /srv/helmfile_linux_amd64.tar.gz + +FROM scratch AS kubectl-remote +ARG KUBECTL_VERSION=1.24.1 +ADD https://dl.k8s.io/release/v${KUBECTL_VERSION}/bin/linux/amd64/kubectl /srv/kubectl + +FROM scratch AS kustomize-remote +ARG KUSTOMIZE_VERSION=3.8.0 +#ARG KUSTOMIZE_VERSION=5.5.0 +ADD https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize%2Fv${KUSTOMIZE_VERSION}/kustomize_v${KUSTOMIZE_VERSION}_linux_amd64.tar.gz /srv/kustomize_linux_amd64.tar.gz + +FROM debian:bookworm-20241223-slim AS host-base-tools + +RUN true && \ + apt-get update && \ + apt-get install -y git && \ + adduser tool && \ + getent passwd && \ + true + +FROM host-base-tools as host-build-tools +COPY --from=helm-remote /srv/helm-linux-amd64.tar.gz /srv/helm-linux-amd64.tar.gz +COPY --from=helm-diff-remote /srv/helm-diff-linux-amd64.tgz /srv/helm-diff-linux-amd64.tgz +COPY --from=helm-git-remote /srv/helm-git.tar.gz /srv/helm-git.tar.gz +COPY --from=helmfile-remote /srv/helmfile_linux_amd64.tar.gz /srv/helmfile_linux_amd64.tar.gz +COPY --from=kubectl-remote /srv/kubectl /usr/local/bin/kubectl +COPY --from=kustomize-remote /srv/kustomize_linux_amd64.tar.gz /srv/kustomize_linux_amd64.tar.gz + +RUN true && set -x && \ + chown tool:tool /srv/* && \ + chmod +x /usr/local/bin/kubectl && \ + cd /tmp && \ + mkdir install && cd install && \ + tar -zxvf /srv/helm-linux-amd64.tar.gz && \ + mv linux-amd64/helm /usr/local/bin/helm && \ + cd .. && rm -rf install && \ + mkdir install && cd install && \ + tar -zxvf /srv/helmfile_linux_amd64.tar.gz && \ + mv helmfile /usr/local/bin/helmfile && \ + cd .. && rm -rf install && \ + mkdir install && cd install && \ + tar -zxvf /srv/kustomize_linux_amd64.tar.gz && \ + mv kustomize /usr/local/bin/kustomize && \ + cd .. && rm -rf install && \ + true + +USER tool:tool +RUN true && set -x && \ + cd /home/tool && \ + helm env > /tmp/.helm-env && . /tmp/.helm-env && rm /tmp/.helm-env && \ + mkdir -p $HELM_PLUGINS && \ + tar -C $HELM_PLUGINS -xf /srv/helm-diff-linux-amd64.tgz && \ + tar -C $HELM_PLUGINS -xf /srv/helm-git.tar.gz && \ + helm version && helm plugin list && \ + helmfile version && \ + mkdir -p .config/kustomize/plugins && \ + mkdir .ssh && chmod 700 .ssh && \ + true + +FROM host-base-tools as final-output +COPY --from=host-build-tools /home/tool/ /home/tool/ +COPY --from=host-build-tools /usr/local/bin/ /usr/local/bin/ +COPY --from=host-build-tools /usr/local/sbin/ /usr/local/sbin/ +COPY entrypoint.sh /usr/local/sbin/entrypoint.sh +ENTRYPOINT ["entrypoint.sh"] diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100755 index 0000000..d46210b --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +set -ex + +configure_ssh_known_hosts() { + if [[ -z $SSH_KNOWN_HOSTS ]]; then return; fi + for host in $SSH_KNOWN_HOSTS; do + ssh-keyscan $host 2>/dev/null + done > "/home/tool/.ssh/known_hosts" + chown tool:tool "/home/tool/.ssh/known_hosts" +} + +configure_ssh_config() { + { + echo "Host *" + echo " PubkeyAcceptedAlgorithms +ssh-rsa" + } > "/home/tool/.ssh/config" + chown tool:tool "/home/tool/.ssh/config" +} + +configure_ssh_known_hosts +configure_ssh_config + +[[ $# -eq 0 ]] && set -- "bash" +exec "$@" -- libgit2 0.24.0