# Ansible Controller с предустановленными коллекциями # Автор: Сергей Антропов # Сайт: https://devops.org.ru FROM ubuntu:22.04 # Обновляем систему RUN apt-get update && apt-get upgrade -y && apt-get clean # Устанавливаем Python и Ansible RUN apt-get install -y \ python3 \ python3-pip \ python3-venv \ python3-dev \ build-essential \ && apt-get clean # Устанавливаем Ansible, ansible-lint, passlib RUN pip3 install ansible ansible-core ansible-lint passlib # Устанавливаем дополнительные пакеты RUN apt-get install -y \ curl \ wget \ git \ vim \ nano \ htop \ tree \ jq \ && apt-get clean # Устанавливаем yq RUN wget -qO /usr/local/bin/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_arm64 \ && chmod +x /usr/local/bin/yq # Устанавливаем Podman (вместо Docker). Для Ubuntu 22.04 — из universe RUN apt-get install -y software-properties-common \ && add-apt-repository -y universe \ && apt-get update \ && apt-get install -y podman \ && apt-get clean # Устанавливаем kubectl RUN curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" \ && chmod +x kubectl \ && mv kubectl /usr/local/bin/ # Устанавливаем Helm RUN curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash # Устанавливаем Minikube (вместо Kind, для использования с драйвером podman) RUN curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 \ && chmod +x minikube-linux-amd64 \ && mv minikube-linux-amd64 /usr/local/bin/minikube ## Устанавливаем Istio CLI #RUN curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.22.1 sh - \ # && mv istio-1.22.1/bin/istioctl /usr/local/bin/ \ # && rm -rf istio-1.22.1 # Копируем файлы зависимостей COPY requirements.yml /tmp/requirements.yml COPY requirements.txt /tmp/requirements.txt # Устанавливаем Python зависимости RUN pip3 install -r /tmp/requirements.txt # Устанавливаем Ansible коллекции RUN ansible-galaxy collection install -r /tmp/requirements.yml # Создаем пользователя ansible RUN useradd -m -s /bin/bash ansible \ && echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers # Создаем рабочую директорию WORKDIR /ansible # Устанавливаем права RUN chown -R ansible:ansible /ansible # Переключаемся на пользователя ansible USER ansible # Устанавливаем дополнительные роли (коллекция containers.podman в requirements.yml) RUN ansible-galaxy install geerlingguy.kubernetes # Устанавливаем molecule как root (delegated driver для Podman) RUN pip3 install ansible ansible-core ansible-lint molecule passlib # Проверяем, что molecule установлен RUN which molecule || echo "molecule not found" # Настройки для работы с Podman (сокет монтируется с хоста) ENV CONTAINER_HOST=unix:///run/podman/podman.sock ENV ANSIBLE_FORCE_COLOR=1 ENV ANSIBLE_STDOUT_CALLBACK=yaml ENV ANSIBLE_CALLBACKS_ENABLED=profile_tasks ENV PATH="/home/ansible/.local/bin:$PATH" # Команда по умолчанию CMD ["sleep", "infinity"]