Initial commit
ContainerImages/cfg/pipeline/head This commit looks good Details

main
Dustin 2024-01-17 14:01:19 -06:00
commit 7cefbd30b6
4 changed files with 91 additions and 0 deletions

47
Containerfile Normal file
View File

@ -0,0 +1,47 @@
FROM registry.fedoraproject.org/fedora-minimal:39 AS build
ARG CUE_VERSION=0.7.0
RUN --mount=type=cache,target=/var/cache \
microdnf install -y \
--setopt install_weak_deps=0 \
gzip \
tar \
&& ARCH=$(uname -m) \
&& case "${ARCH}" in \
x86_64) ARCH=amd64 ;; \
aarch64) ARCH=arm64 ;; \
esac \
&& url="https://github.com/cue-lang/cue/releases/download/v${CUE_VERSION}/cue_v${CUE_VERSION}_linux_${ARCH}.tar.gz" \
&& curl -fsSL "${url}" \
| tar -C /usr/local/bin -xz cue \
&& :
FROM git.pyrocufflink.net/containerimages/tmpl
RUN --mount=type=cache,target=/var/cache \
--mount=type=bind,from=build,source=/,target=/build \
microdnf install -y \
--setopt install_weak_deps=0 \
age \
git-core \
&& ln -snf /host/etc/passwd /etc/passwd \
&& ln -snf /host/etc/group /etc/group \
&& cp -a /build/usr/local/bin/cue /usr/local/bin/ \
&& for cmd in \
systemctl \
systemd-sysusers \
; do ln -s nsenter.sh /usr/local/bin/${cmd}; done \
&& :
COPY nsenter.sh /usr/local/bin/nsenter.sh
COPY config.sh /
ENTRYPOINT []
CMD ["/config.sh"]
LABEL license= \
vendor='Dustin C. Hatch' \

6
Jenkinsfile vendored Normal file
View File

@ -0,0 +1,6 @@
@Library('containerimages')_
buildContainerImage2(
project: 'infra',
archlist: ['amd64', 'arm64'],
)

35
config.sh Executable file
View File

@ -0,0 +1,35 @@
#!/bin/sh
: "${HOSTNAME:=$(hostname -f || uname -n)}"
: "${DESTDIR=/host}"
: "${KEYSERV_URL:=https://keyserv.pyrocufflink.blue}"
: "${SSH_CERT:=${DESTDIR}/etc/ssh/ssh_host_ed25519_key-cert.pub}"
: "${SSH_KEY:=${SSH_CERT%-cert.pub}}"
: "${GIT_URL:=https://git.pyrocufflink.net/infra/cfg.git}"
: "${GIT_BRANCH:=master}"
printf 'Applying configuration policy for %s ...\n' "${HOSTNAME}"
cd "$(mktemp -d)" || exit
git clone --depth 1 "${GIT_URL}" -b "${GIT_BRANCH}" . || exit
if [ -f host/"${HOSTNAME}".pre.sh ]; then
. host/"${HOSTNAME}".pre.sh
fi
curl -fsSL \
"${KEYSERV_URL}"/keys \
-H "Authorization: $(cat "${SSH_CERT}")" \
-o keys.age
age -d -i "${SSH_KEY}" -o keys.txt keys.age
if [ -f host/"${HOSTNAME}".cue ] && [ -f instructions/"${HOSTNAME}".cue ]; then
cue export host/"${HOSTNAME}".cue -o values.json || exit
cue export instructions/"${HOSTNAME}".cue -o instructions.json || exit
tmpl instructions.json values.json -d "${DESTDIR}" || exit
fi
if [ -f host/"${HOSTNAME}".post.sh ]; then
. host/"${HOSTNAME}".post.sh
fi

3
nsenter.sh Executable file
View File

@ -0,0 +1,3 @@
#!/bin/sh
exec nsenter -a -t 1 "${0##*/}" "$@"