Add ansible docker execution environment (Dockerfile, requirements, runner script)
This commit is contained in:
@@ -0,0 +1,35 @@
|
|||||||
|
FROM debian:trixie-slim
|
||||||
|
ARG DEBIAN_FRONTEND=noninteractive
|
||||||
|
ENV TZ=Europe/Berlin
|
||||||
|
ENV ANSIBLE_VERSION=2.20.6
|
||||||
|
ENV PIP_BREAK_SYSTEM_PACKAGES=1
|
||||||
|
|
||||||
|
RUN apt update && apt install -y --no-install-recommends \
|
||||||
|
nano \
|
||||||
|
git \
|
||||||
|
wget \
|
||||||
|
unzip \
|
||||||
|
curl \
|
||||||
|
python3-pip \
|
||||||
|
tzdata \
|
||||||
|
openssh-client \
|
||||||
|
iputils-ping \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
RUN mkdir -p /etc/ssh/ssh_config.d \
|
||||||
|
&& printf 'Host *\n StrictHostKeyChecking no\n UserKnownHostsFile /dev/null\n' > /etc/ssh/ssh_config.d/99-no-hostkey-check.conf
|
||||||
|
|
||||||
|
RUN pip3 install --no-cache-dir --upgrade \
|
||||||
|
ansible-core~=${ANSIBLE_VERSION}
|
||||||
|
|
||||||
|
RUN mkdir -p /root/.bashrc.d
|
||||||
|
COPY ansible-functs.sh /root/.bashrc.d/ansible-functs.sh
|
||||||
|
RUN chmod +x /root/.bashrc.d/ansible-functs.sh \
|
||||||
|
&& printf '\n[ -f /root/.bashrc.d/ansible-functs.sh ] && . /root/.bashrc.d/ansible-functs.sh\n' >> /root/.bashrc
|
||||||
|
|
||||||
|
COPY requirements.yml /ansible/requirements.yml
|
||||||
|
RUN ansible-galaxy collection install -r /ansible/requirements.yml
|
||||||
|
|
||||||
|
WORKDIR /ansible
|
||||||
|
|
||||||
|
CMD ["ansible-playbook", "--version"]
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Useful bashrc functions for ansible in docker
|
||||||
|
|
||||||
|
alias ll='ls -alF'
|
||||||
|
alias la='ls -A'
|
||||||
|
alias l='ls -CF'
|
||||||
|
|
||||||
|
alias ap='ansible-playbook'
|
||||||
|
alias ag='ansible-galaxy'
|
||||||
|
alias av='ansible-vault'
|
||||||
|
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
collections:
|
||||||
|
- name: ansible.posix
|
||||||
|
version: 2.2.0
|
||||||
|
- name: community.general
|
||||||
|
version: 13.0.1
|
||||||
|
- name: community.docker
|
||||||
|
version: 5.2.0
|
||||||
Executable
+62
@@ -0,0 +1,62 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
defaultimage="ansible:deb13"
|
||||||
|
|
||||||
|
export ANSIBLE_HOST_KEY_CHECKING=False
|
||||||
|
export ANSIBLE_SSH_ARGS='-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null'
|
||||||
|
export ANSIBLE_CONFIG=./ansible.cfg
|
||||||
|
|
||||||
|
# Ermittle den nächsten freien Container-Namen
|
||||||
|
base_name="ansible"
|
||||||
|
network_name="ansible-dualstack"
|
||||||
|
counter=1
|
||||||
|
while docker ps -a --format '{{.Names}}' | grep -q "^${base_name}-${counter}$"; do
|
||||||
|
counter=$((counter + 1))
|
||||||
|
done
|
||||||
|
container_name="${base_name}-${counter}"
|
||||||
|
|
||||||
|
if docker network inspect "$network_name" >/dev/null 2>&1; then
|
||||||
|
network_ipv6_enabled=$(docker network inspect -f '{{.EnableIPv6}}' "$network_name" 2>/dev/null)
|
||||||
|
if [ "$network_ipv6_enabled" != "true" ]; then
|
||||||
|
echo "Docker-Netzwerk '$network_name' existiert bereits ohne IPv6-Unterstuetzung." >&2
|
||||||
|
echo "Bitte Netzwerk entfernen oder einen anderen Netzwerknamen verwenden." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
if ! docker network create --driver bridge --ipv6 "$network_name" >/dev/null; then
|
||||||
|
echo "Docker-Netzwerk '$network_name' mit IPv6 konnte nicht erstellt werden." >&2
|
||||||
|
echo "Pruefe, ob Docker IPv6 fuer benutzerdefinierte Bridge-Netze unterstuetzt." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
docker run --rm -dit \
|
||||||
|
--name "$container_name" \
|
||||||
|
--hostname "$container_name" \
|
||||||
|
--network "$network_name" \
|
||||||
|
-e ANSIBLE_HOST_KEY_CHECKING=False \
|
||||||
|
-e ANSIBLE_SSH_ARGS='-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null' \
|
||||||
|
-e ANSIBLE_CONFIG=./ansible.cfg \
|
||||||
|
-v "$(pwd):/ansible" \
|
||||||
|
-v ansible_ssh_keys:/root/.ssh \
|
||||||
|
-w /ansible \
|
||||||
|
$defaultimage \
|
||||||
|
"/bin/bash"
|
||||||
|
|
||||||
|
docker exec "$container_name" sh -lc "mkdir -p /root/.ssh && chmod 700 /root/.ssh && printf 'Host *\n StrictHostKeyChecking no\n UserKnownHostsFile /dev/null\n' > /root/.ssh/config && chmod 600 /root/.ssh/config"
|
||||||
|
|
||||||
|
container_ipv4=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{if .IPAddress}}{{.IPAddress}}{{end}}{{end}}' "$container_name" 2>/dev/null)
|
||||||
|
container_ipv6=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{if .GlobalIPv6Address}}{{.GlobalIPv6Address}}{{end}}{{end}}' "$container_name" 2>/dev/null)
|
||||||
|
container_os=$(docker exec "$container_name" sh -c 'grep PRETTY_NAME /etc/os-release 2>/dev/null | cut -d= -f2 | tr -d "\"" 2>/dev/null')
|
||||||
|
|
||||||
|
echo "-----------------------------------"
|
||||||
|
echo "Container Name : $container_name"
|
||||||
|
echo "Container IPv4 : ${container_ipv4:-n/a}"
|
||||||
|
echo "Container IPv6 : ${container_ipv6:-n/a}"
|
||||||
|
echo "Container OS : ${container_os:-n/a}"
|
||||||
|
echo "-----------------------------------"
|
||||||
|
|
||||||
|
docker attach "$container_name"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user