Оптимизация Dockerfile: убраны лишние пакеты и закомментированы Docker/yq
Some checks failed
Ansible Testing / lint (push) Has been cancelled
Ansible Testing / test (default) (push) Has been cancelled
Ansible Testing / test (minimal) (push) Has been cancelled
Ansible Testing / test (performance) (push) Has been cancelled
Ansible Testing / deploy-check (push) Has been cancelled

- Убраны пакеты: vim, jq, git, htop, tree из всех Dockerfile
- Закомментированы установки Docker, Docker Compose, yq
- Обновлен Rocky Linux до версии 9 с Python 3
- Исправлена проблема с passlib в ansible-controller
- Оставлены только необходимые пакеты: systemd, curl, wget, nano, python3, sudo
This commit is contained in:
Сергей Антропов
2025-10-25 22:31:41 +03:00
parent 1fc454e767
commit 7924691d34
28 changed files with 410 additions and 153 deletions

View File

@@ -915,6 +915,20 @@ controller:
--push \ --push \
.; \ .; \
echo "✅ ansible-controller собран и отправлен";; \ echo "✅ ansible-controller собран и отправлен";; \
rebuild) \
echo "🔄 Пересборка ansible-controller с исправлениями..."; \
echo "📋 Платформы: $(DOCKER_PLATFORMS)"; \
echo "🔧 Исправления: добавлен passlib для хеширования паролей"; \
$(MAKE) docker setup-builder; \
cd dockerfiles/ansible-controller && \
docker buildx build \
--platform $(DOCKER_PLATFORMS) \
--tag $(DOCKER_REGISTRY):ansible-controller-$(DOCKER_VERSION) \
--tag $(DOCKER_REGISTRY):ansible-controller-latest \
--push \
--no-cache \
.; \
echo "✅ ansible-controller пересобран с исправлениями";; \
run) \ run) \
echo "🚀 Запуск ansible-controller..."; \ echo "🚀 Запуск ansible-controller..."; \
cd dockerfiles/ansible-controller && docker-compose up -d; \ cd dockerfiles/ansible-controller && docker-compose up -d; \
@@ -932,6 +946,11 @@ controller:
echo " 💡 Использует: dockerfiles/ansible-controller/Dockerfile"; \ echo " 💡 Использует: dockerfiles/ansible-controller/Dockerfile"; \
echo " 💡 Requirements: dockerfiles/ansible-controller/requirements.yml"; \ echo " 💡 Requirements: dockerfiles/ansible-controller/requirements.yml"; \
echo ""; \ echo ""; \
echo " 🔄 make controller rebuild - пересобрать ansible-controller с исправлениями"; \
echo " 💡 Пересобирает: с --no-cache для применения исправлений"; \
echo " 💡 Исправления: добавлен passlib для хеширования паролей"; \
echo " 💡 Платформы: $(DOCKER_PLATFORMS)"; \
echo ""; \
echo " 🚀 make controller run - запустить ansible-controller"; \ echo " 🚀 make controller run - запустить ansible-controller"; \
echo " 💡 Запускает: docker-compose up -d"; \ echo " 💡 Запускает: docker-compose up -d"; \
echo " 💡 Использует: dockerfiles/ansible-controller/docker-compose.yml"; \ echo " 💡 Использует: dockerfiles/ansible-controller/docker-compose.yml"; \

View File

@@ -15,27 +15,27 @@ RUN dnf install -y \
dbus \ dbus \
curl \ curl \
wget \ wget \
git \
vim \
nano \ nano \
jq \ python39 \
python3 \ python39-pip \
python3-pip \
sudo \ sudo \
&& dnf clean all && dnf clean all
# Создаем symlink для python3 -> python3.9
RUN ln -sf /usr/bin/python3.9 /usr/bin/python3
# Устанавливаем yq # Устанавливаем yq
RUN wget -qO /usr/local/bin/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_arm64 \ # RUN wget -qO /usr/local/bin/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_arm64 \
&& chmod +x /usr/local/bin/yq # && chmod +x /usr/local/bin/yq
# Устанавливаем Docker # Устанавливаем Docker
RUN dnf install -y dnf-plugins-core \ # RUN dnf install -y dnf-plugins-core \
&& dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo \ # && dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo \
&& dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin # && dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# Устанавливаем Docker Compose # Устанавливаем Docker Compose
RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \ # RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \
&& chmod +x /usr/local/bin/docker-compose # && chmod +x /usr/local/bin/docker-compose
# Настраиваем systemd # Настраиваем systemd
RUN systemctl set-default multi-user.target RUN systemctl set-default multi-user.target

View File

@@ -14,12 +14,7 @@ RUN apt-get install -y \
dbus \ dbus \
curl \ curl \
wget \ wget \
git \
vim-enhanced \
nano \ nano \
htop \
tree \
jq \
python3 \ python3 \
sudo \ sudo \
&& apt-get clean && apt-get clean
@@ -28,19 +23,19 @@ RUN apt-get install -y \
RUN curl -sS https://bootstrap.pypa.io/pip/3.7/get-pip.py | python3 RUN curl -sS https://bootstrap.pypa.io/pip/3.7/get-pip.py | python3
# Устанавливаем yq # Устанавливаем yq
RUN wget -qO /usr/local/bin/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_arm64 \ # RUN wget -qO /usr/local/bin/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_arm64 \
&& chmod +x /usr/local/bin/yq # && chmod +x /usr/local/bin/yq
# Устанавливаем Docker вручную для ALT Linux # Устанавливаем Docker вручную для ALT Linux
RUN apt-get update && apt-get install -y \ # RUN apt-get update && apt-get install -y \
ca-certificates \ # ca-certificates \
curl \ # curl \
gnupg \ # gnupg \
&& apt-get clean # && apt-get clean
# Устанавливаем Docker Compose # Устанавливаем Docker Compose
RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \ # RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \
&& chmod +x /usr/local/bin/docker-compose # && chmod +x /usr/local/bin/docker-compose
# Настраиваем systemd # Настраиваем systemd
RUN systemctl set-default multi-user.target RUN systemctl set-default multi-user.target

View File

@@ -16,8 +16,8 @@ RUN apt-get install -y \
build-essential \ build-essential \
&& apt-get clean && apt-get clean
# Устанавливаем Ansible и ansible-lint # Устанавливаем Ansible, ansible-lint и passlib для хеширования паролей
RUN pip3 install ansible ansible-core ansible-lint RUN pip3 install ansible ansible-core ansible-lint passlib
# Устанавливаем дополнительные пакеты # Устанавливаем дополнительные пакеты
RUN apt-get install -y \ RUN apt-get install -y \
@@ -56,8 +56,12 @@ RUN curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.23.0/kind-linux-amd64 \
# && mv istio-1.22.1/bin/istioctl /usr/local/bin/ \ # && mv istio-1.22.1/bin/istioctl /usr/local/bin/ \
# && rm -rf istio-1.22.1 # && rm -rf istio-1.22.1
# Копируем requirements.yml # Копируем файлы зависимостей
COPY requirements.yml /tmp/requirements.yml COPY requirements.yml /tmp/requirements.yml
COPY requirements.txt /tmp/requirements.txt
# Устанавливаем Python зависимости
RUN pip3 install -r /tmp/requirements.txt
# Устанавливаем Ansible коллекции # Устанавливаем Ansible коллекции
RUN ansible-galaxy collection install -r /tmp/requirements.yml RUN ansible-galaxy collection install -r /tmp/requirements.yml

View File

@@ -0,0 +1,9 @@
# Python зависимости для Ansible Controller
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
# Основные зависимости для работы с паролями
passlib>=1.7.4
# Дополнительные зависимости для безопасности
bcrypt>=4.0.1

View File

@@ -1,5 +1,5 @@
--- ---
# Ansible Collections для Molecule Universal # Ansible Collections for Molecule Universal
collections: collections:
- name: community.docker - name: community.docker
version: ">=3.0.0" version: ">=3.0.0"

View File

@@ -15,37 +15,34 @@ RUN apt-get install -y \
dbus \ dbus \
curl \ curl \
wget \ wget \
git \
vim \
nano \ nano \
htop \
tree \
jq \
python3 \ python3 \
python3-pip \ python3-pip \
sudo \ sudo \
&& apt-get clean && apt-get clean
# Устанавливаем yq # Устанавливаем yq (автоопределение архитектуры)
RUN wget -qO /usr/local/bin/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_arm64 \ # RUN ARCH=$(dpkg --print-architecture | sed 's/amd64/amd64/; s/arm64/arm64/; s/aarch64/arm64/') && \
&& chmod +x /usr/local/bin/yq # wget -qO /usr/local/bin/yq "https://github.com/mikefarah/yq/releases/latest/download/yq_linux_${ARCH}" && \
# chmod +x /usr/local/bin/yq
# Устанавливаем Docker вручную для AstraLinux # Устанавливаем Docker вручную для AstraLinux (автоопределение архитектуры)
RUN apt-get update && apt-get install -y \ # RUN ARCH=$(dpkg --print-architecture) && \
ca-certificates \ # apt-get update && apt-get install -y \
curl \ # ca-certificates \
gnupg \ # curl \
lsb-release \ # gnupg \
&& mkdir -p /usr/share/keyrings \ # lsb-release && \
&& curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg \ # mkdir -p /usr/share/keyrings && \
&& echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian buster stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null \ # curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg && \
&& apt-get update \ # echo "deb [arch=${ARCH} signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian buster stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null && \
&& apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin \ # apt-get update && \
&& apt-get clean # apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin && \
# apt-get clean
# Устанавливаем Docker Compose # Устанавливаем Docker Compose
RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \ # RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \
&& chmod +x /usr/local/bin/docker-compose # && chmod +x /usr/local/bin/docker-compose
# Отключаем Parsec для работы в контейнере # Отключаем Parsec для работы в контейнере
RUN if [ -f /etc/parsec/parsec.conf ]; then \ RUN if [ -f /etc/parsec/parsec.conf ]; then \

View File

@@ -14,25 +14,22 @@ RUN dnf install -y --allowerasing \
dbus \ dbus \
curl \ curl \
wget \ wget \
git \
vim \
nano \ nano \
jq \
python3 \ python3 \
python3-pip \ python3-pip \
sudo \ sudo \
&& dnf clean all && dnf clean all
# Устанавливаем yq # Устанавливаем yq
RUN wget -qO /usr/local/bin/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_arm64 \ # RUN wget -qO /usr/local/bin/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_arm64 \
&& chmod +x /usr/local/bin/yq # && chmod +x /usr/local/bin/yq
# Устанавливаем Docker # Устанавливаем Docker
RUN curl -fsSL https://get.docker.com | sh # RUN curl -fsSL https://get.docker.com | sh
# Устанавливаем Docker Compose # Устанавливаем Docker Compose
RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \ # RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \
&& chmod +x /usr/local/bin/docker-compose # && chmod +x /usr/local/bin/docker-compose
# Настраиваем systemd # Настраиваем systemd
RUN systemctl set-default multi-user.target RUN systemctl set-default multi-user.target

View File

@@ -14,33 +14,28 @@ RUN apt-get install -y \
dbus \ dbus \
curl \ curl \
wget \ wget \
git \
vim \
nano \ nano \
htop \
tree \
jq \
python3 \ python3 \
python3-pip \ python3-pip \
sudo \ sudo \
&& apt-get clean && apt-get clean
# Устанавливаем Docker вручную для Debian # Устанавливаем Docker вручную для Debian
RUN apt-get update && apt-get install -y \ # RUN apt-get update && apt-get install -y \
ca-certificates \ # ca-certificates \
curl \ # curl \
gnupg \ # gnupg \
lsb-release \ # lsb-release \
&& mkdir -p /usr/share/keyrings \ # && mkdir -p /usr/share/keyrings \
&& curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg \ # && curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg \
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian bookworm stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null \ # && echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian bookworm stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null \
&& apt-get update \ # && apt-get update \
&& apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin \ # && apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin \
&& apt-get clean # && apt-get clean
# Устанавливаем Docker Compose # Устанавливаем Docker Compose
RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \ # RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \
&& chmod +x /usr/local/bin/docker-compose # && chmod +x /usr/local/bin/docker-compose
# Настраиваем systemd # Настраиваем systemd
RUN systemctl set-default multi-user.target RUN systemctl set-default multi-user.target

View File

@@ -16,28 +16,26 @@ RUN dnf install -y \
dbus \ dbus \
curl \ curl \
wget \ wget \
git \
vim \
nano \ nano \
jq \
python3 \ python3 \
python3-pip \ python3-pip \
sudo \ sudo \
&& dnf clean all && dnf clean all
# Устанавливаем yq # Устанавливаем yq (автоопределение архитектуры)
RUN wget -qO /usr/local/bin/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_arm64 \ # RUN ARCH=$(uname -m | sed 's/x86_64/amd64/; s/aarch64/arm64/') && \
&& chmod +x /usr/local/bin/yq # wget -qO /usr/local/bin/yq "https://github.com/mikefarah/yq/releases/latest/download/yq_linux_${ARCH}" && \
# chmod +x /usr/local/bin/yq
# Устанавливаем Docker вручную для RED OS # Устанавливаем Docker вручную для RED OS
RUN dnf install -y dnf-plugins-core \ # RUN dnf install -y dnf-plugins-core \
&& dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo \ # && dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo \
&& dnf install -y docker-ce docker-ce-cli containerd.io \ # && dnf install -y docker-ce docker-ce-cli containerd.io \
&& dnf clean all # && dnf clean all
# Устанавливаем Docker Compose # Устанавливаем Docker Compose
RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \ # RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \
&& chmod +x /usr/local/bin/docker-compose # && chmod +x /usr/local/bin/docker-compose
# Настраиваем systemd # Настраиваем systemd
RUN systemctl set-default multi-user.target RUN systemctl set-default multi-user.target

View File

@@ -14,25 +14,25 @@ RUN dnf install -y \
dbus \ dbus \
curl \ curl \
wget \ wget \
git \
vim \
nano \ nano \
jq \ python39 \
python3 \ python39-pip \
python3-pip \
sudo \ sudo \
&& dnf clean all && dnf clean all
# Создаем symlink для python3 -> python3.9
RUN ln -sf /usr/bin/python3.9 /usr/bin/python3
# Устанавливаем yq # Устанавливаем yq
RUN wget -qO /usr/local/bin/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_arm64 \ # RUN wget -qO /usr/local/bin/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_arm64 \
&& chmod +x /usr/local/bin/yq # && chmod +x /usr/local/bin/yq
# Устанавливаем Docker # Устанавливаем Docker
RUN curl -fsSL https://get.docker.com | sh # RUN curl -fsSL https://get.docker.com | sh
# Устанавливаем Docker Compose # Устанавливаем Docker Compose
RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \ # RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \
&& chmod +x /usr/local/bin/docker-compose # && chmod +x /usr/local/bin/docker-compose
# Настраиваем systemd # Настраиваем systemd
RUN systemctl set-default multi-user.target RUN systemctl set-default multi-user.target

View File

@@ -2,7 +2,7 @@
# Автор: Сергей Антропов # Автор: Сергей Антропов
# Сайт: https://devops.org.ru # Сайт: https://devops.org.ru
FROM rockylinux:8 FROM rockylinux:9
# Обновляем систему # Обновляем систему
RUN dnf update -y && dnf upgrade -y RUN dnf update -y && dnf upgrade -y
@@ -14,27 +14,30 @@ RUN dnf install -y \
dbus \ dbus \
curl \ curl \
wget \ wget \
git \
vim \
nano \ nano \
jq \
python3 \ python3 \
python3-pip \ python3-pip \
python3-devel \
sudo \ sudo \
&& dnf clean all && dnf clean all
# Устанавливаем yq # Устанавливаем более новую версию Python через pip если нужно
RUN wget -qO /usr/local/bin/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_arm64 \ RUN python3 -m pip install --upgrade pip
&& chmod +x /usr/local/bin/yq
# Устанавливаем yq (автоматически определяем архитектуру)
# RUN ARCH=$(uname -m) && \
# if [ "$ARCH" = "x86_64" ]; then ARCH="amd64"; elif [ "$ARCH" = "aarch64" ]; then ARCH="arm64"; fi && \
# wget -qO /usr/local/bin/yq "https://github.com/mikefarah/yq/releases/latest/download/yq_linux_${ARCH}" && \
# chmod +x /usr/local/bin/yq
# Устанавливаем Docker # Устанавливаем Docker
RUN dnf install -y dnf-plugins-core \ # RUN dnf install -y dnf-plugins-core \
&& dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo \ # && dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo \
&& dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin # && dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# Устанавливаем Docker Compose # Устанавливаем Docker Compose
RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \ # RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \
&& chmod +x /usr/local/bin/docker-compose # && chmod +x /usr/local/bin/docker-compose
# Настраиваем systemd # Настраиваем systemd
RUN systemctl set-default multi-user.target RUN systemctl set-default multi-user.target

View File

@@ -14,33 +14,28 @@ RUN apt-get install -y \
dbus \ dbus \
curl \ curl \
wget \ wget \
git \
vim \
nano \ nano \
htop \
tree \
jq \
python3 \ python3 \
python3-pip \ python3-pip \
sudo \ sudo \
&& apt-get clean && apt-get clean
# Устанавливаем Docker вручную для Ubuntu # Устанавливаем Docker вручную для Ubuntu
RUN apt-get update && apt-get install -y \ # RUN apt-get update && apt-get install -y \
ca-certificates \ # ca-certificates \
curl \ # curl \
gnupg \ # gnupg \
lsb-release \ # lsb-release \
&& mkdir -p /usr/share/keyrings \ # && mkdir -p /usr/share/keyrings \
&& curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg \ # && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg \
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu jammy stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null \ # && echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu jammy stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null \
&& apt-get update \ # && apt-get update \
&& apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin \ # && apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin \
&& apt-get clean # && apt-get clean
# Устанавливаем Docker Compose # Устанавливаем Docker Compose
RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \ # RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \
&& chmod +x /usr/local/bin/docker-compose # && chmod +x /usr/local/bin/docker-compose
# Настраиваем systemd # Настраиваем systemd
RUN systemctl set-default multi-user.target RUN systemctl set-default multi-user.target

148
docs/platform-support.md Normal file
View File

@@ -0,0 +1,148 @@
# Поддержка платформ в пресетах
## Автор
Сергей Антропов
Сайт: https://devops.org.ru
## Описание
Начиная с версии 1.0, Molecule Template поддерживает указание конкретных платформ для хостов в пресетах. Это позволяет автоматически фильтровать хосты, которые не поддерживаются на текущей архитектуре системы.
## Обязательные требования
**Для Astra Linux и RedOS** во всех пресетах **обязательно** должно быть указано `supported_platforms: ["linux/amd64"]`, так как эти системы не поддерживают arm64 архитектуру. Без этого указания могут возникать ошибки при запуске на ARM-системах.
## Как это работает
### Определение платформы
Система автоматически определяет архитектуру хоста при запуске:
- `x86_64``linux/amd64`
- `aarch64` / `arm64``linux/arm64`
- `armv7l``linux/arm/v7`
### Синтаксис в пресетах
В файлах пресетов (molecule/presets/*.yml) можно указать поле `supported_platforms` для каждого хоста:
```yaml
hosts:
- name: ubuntu-test
family: ubuntu
groups: [test]
# Без supported_platforms - работает на всех платформах
publish:
- "8080:80"
- name: astra-test
family: astra
groups: [test]
supported_platforms: ["linux/amd64"] # Только amd64
publish:
- "8083:80"
- name: multi-test
family: ubuntu
groups: [test]
supported_platforms: ["linux/amd64", "linux/arm64"] # Несколько платформ
publish:
- "8084:80"
```
### Правила фильтрации
1. **Если `supported_platforms` не указано** - хост будет запущен на всех платформах
2. **Если `supported_platforms: ["linux/amd64"]`** - хост запустится только на amd64
3. **Если `supported_platforms: ["linux/amd64", "linux/arm64"]`** - хост запустится на обеих платформах
### Примеры использования
#### Универсальный хост (работает везде)
```yaml
- name: universal-test
family: ubuntu
groups: [test]
# supported_platforms не указано = работает на всех платформах
```
#### Только для amd64
```yaml
- name: amd64-only-test
family: astra
groups: [test]
supported_platforms: ["linux/amd64"]
```
#### Для нескольких платформ
```yaml
- name: multi-platform-test
family: debian
groups: [test]
supported_platforms: ["linux/amd64", "linux/arm64"]
```
## Реализация
Фильтрация происходит в файле `molecule/default/create.yml`:
1. Система определяет текущую платформу
2. Загружается пресет
3. Хосты фильтруются по `supported_platforms`
4. Отображается количество хостов для текущей платформы
```yaml
# Фильтрация хостов по поддерживаемым платформам
- name: Filter hosts by supported platforms
set_fact:
filtered_hosts: "{{ filtered_hosts | default([]) + [item] }}"
loop: "{{ hosts }}"
when: |
item.supported_platforms is not defined or
ansible_architecture in item.supported_platforms
```
## Текущее состояние
### Хосты с ограничениями по платформе
- **Astra Linux** - только `linux/amd64` (нет нативной поддержки arm64)
- Во всех пресетах имеет `supported_platforms: ["linux/amd64"]`
- Базовый образ `registry.astralinux.ru/library/astra/ubi17:1.7.6.uu2` доступен только для amd64
- **RedOS** - только `linux/amd64` (нет нативной поддержки arm64)
- Во всех пресетах имеет `supported_platforms: ["linux/amd64"]`
- Базовый образ `registry.red-soft.ru/ubi7/ubi` доступен только для amd64
**Важно:** При запуске на arm64 системе эти хосты будут автоматически исключены из списка, что предотвратит ошибки при сборке и запуске контейнеров.
### Универсальные хосты
Следующие системы работают на всех платформах:
- Ubuntu
- Debian
- Alt Linux
- CentOS
- RHEL
- AlmaLinux
- Rocky Linux
## Примеры запуска
### На amd64 (все 9 хостов)
```bash
make role test all-images
# Platform linux/amd64: 9 hosts will be deployed
```
### На arm64 (7 хостов, без Astra и RedOS)
```bash
make role test all-images
# Platform linux/arm64: 7 hosts will be deployed
```
## Дополнительная информация
- Все образы загружаются с принудительным указанием платформы
- Система автоматически адаптирует количество контейнеров под текущую платформу
- Информация о количестве хостов отображается при запуске

View File

@@ -23,7 +23,7 @@
privileged: true privileged: true
command: "/sbin/init" command: "/sbin/init"
volumes: volumes:
- "/sys/fs/cgroup:/sys/fs/cgroup:ro" - "/sys/fs/cgroup:/sys/fs/cgroup:rw"
tmpfs: ["/run", "/run/lock"] tmpfs: ["/run", "/run/lock"]
capabilities: ["SYS_ADMIN"] capabilities: ["SYS_ADMIN"]
hosts: hosts:
@@ -45,24 +45,65 @@
# environment: # environment:
# ANSIBLE_COLLECTIONS_PATH: /usr/share/ansible/collections # ANSIBLE_COLLECTIONS_PATH: /usr/share/ansible/collections
# Определяем архитектуру системы для корректной загрузки образов
- name: Detect system architecture
shell: |
arch=$(uname -m)
case $arch in
x86_64) echo "linux/amd64" ;;
aarch64|arm64) echo "linux/arm64" ;;
armv7l) echo "linux/arm/v7" ;;
*) echo "linux/amd64" ;;
esac
register: detected_platform
changed_when: false
- name: Set ansible_architecture variable
set_fact:
ansible_architecture: "{{ detected_platform.stdout }}"
- name: Load preset configuration - name: Load preset configuration
include_vars: "{{ preset_file }}" include_vars: "{{ preset_file }}"
when: preset_file is file when: preset_file is file
ignore_errors: true ignore_errors: true
# Фильтрация хостов по поддерживаемым платформам
- name: Filter hosts by supported platforms
set_fact:
filtered_hosts: "{{ filtered_hosts | default([]) + [item] }}"
loop: "{{ hosts }}"
when: |
item.supported_platforms is not defined or
ansible_architecture in item.supported_platforms
- name: Update hosts list with filtered results
set_fact:
hosts: "{{ filtered_hosts | default(hosts) }}"
- name: Display filtered hosts
debug:
msg: "Platform {{ ansible_architecture }}: {{ hosts | length }} hosts will be deployed"
- name: Ensure network exists - name: Ensure network exists
community.docker.docker_network: community.docker.docker_network:
name: "{{ docker_network }}" name: "{{ docker_network }}"
state: present state: present
# SYSTEMD nodes # SYSTEMD nodes
- name: Pull systemd images - name: Pull systemd images with correct platform
community.docker.docker_image: command: "docker pull --platform {{ ansible_architecture }} {{ images[item.family] }}"
name: "{{ images[item.family] }}"
source: pull
loop: "{{ hosts | selectattr('type','undefined') | list }}" loop: "{{ hosts | selectattr('type','undefined') | list }}"
loop_control: { label: "{{ item.name }}" } loop_control: { label: "{{ item.name }}" }
when: item.family is defined and images[item.family] is defined when: item.family is defined and images[item.family] is defined
register: pull_result
ignore_errors: yes
- name: Display pull results
debug:
msg: "Pulled {{ item.item.name }}: {{ 'OK' if item.rc == 0 else 'SKIPPED (not available for this platform)' }}"
loop: "{{ pull_result.results | default([]) }}"
loop_control:
label: "{{ item.item.name }}"
- name: Start systemd nodes - name: Start systemd nodes
community.docker.docker_container: community.docker.docker_container:
@@ -77,8 +118,9 @@
capabilities: "{{ systemd_defaults.capabilities | default([]) }}" capabilities: "{{ systemd_defaults.capabilities | default([]) }}"
published_ports: "{{ item.publish | default([]) }}" published_ports: "{{ item.publish | default([]) }}"
env: "{{ item.env | default({}) }}" env: "{{ item.env | default({}) }}"
# Специальные настройки для Astra Linux # Специальные настройки для Astra Linux и RedOS (для совместимости с amd64 базовыми образами)
security_opts: "{{ ['seccomp=unconfined', 'apparmor=unconfined'] if item.family == 'astra' else [] }}" security_opts: "{{ ['seccomp=unconfined', 'apparmor=unconfined'] if item.family in ['astra', 'redos'] else [] }}"
platform: "{{ 'linux/amd64' if item.family in ['astra', 'redos'] else omit }}"
state: started state: started
restart_policy: unless-stopped restart_policy: unless-stopped
loop: "{{ hosts | selectattr('type','undefined') | list }}" loop: "{{ hosts | selectattr('type','undefined') | list }}"
@@ -161,7 +203,6 @@
inv_content: | inv_content: |
[all:vars] [all:vars]
ansible_connection=community.docker.docker ansible_connection=community.docker.docker
ansible_python_interpreter=/usr/bin/python3
ansible_remote_tmp=/tmp/.ansible-tmp ansible_remote_tmp=/tmp/.ansible-tmp
{% for group, members in (groups_map | dictsort) %} {% for group, members in (groups_map | dictsort) %}
@@ -174,6 +215,58 @@
{% for h in hosts %}{{ h.name }} {% for h in hosts %}{{ h.name }}
{% endfor %} {% endfor %}
{# Группа с Debian-based системами (Debian, Ubuntu, Alt) - используем /usr/bin/python3 #}
{% set debian_hosts = [] %}
{% for h in hosts %}
{% if h.family in ['ubuntu', 'debian', 'alt'] %}
{% set _ = debian_hosts.append(h.name) %}
{% endif %}
{% endfor %}
{% if debian_hosts %}
[debian_family:vars]
ansible_python_interpreter=/usr/bin/python3
[debian_family]
{% for h in debian_hosts %}{{ h }}
{% endfor %}
{% endif %}
{# Группа с RHEL-based системами (RHEL, CentOS, Alma, Rocky, RedOS) #}
{% set rhel_hosts = [] %}
{% for h in hosts %}
{% if h.family in ['rhel', 'centos', 'alma', 'rocky', 'redos'] %}
{% set _ = rhel_hosts.append(h.name) %}
{% endif %}
{% endfor %}
{% if rhel_hosts %}
[rhel_family:vars]
ansible_python_interpreter=/usr/bin/python3
[rhel_family]
{% for h in rhel_hosts %}{{ h }}
{% endfor %}
{% endif %}
{# Astra Linux - используем /usr/bin/python3 #}
{% set astra_hosts = [] %}
{% for h in hosts %}
{% if h.family == 'astra' %}
{% set _ = astra_hosts.append(h.name) %}
{% endif %}
{% endfor %}
{% if astra_hosts %}
[astra_family:vars]
ansible_python_interpreter=/usr/bin/python3
[astra_family]
{% for h in astra_hosts %}{{ h }}
{% endfor %}
{% endif %}
{# Глобальный fallback для остальных хостов #}
[unmatched_hosts:vars]
ansible_python_interpreter=auto_silent
- name: Write inventory file - name: Write inventory file
copy: copy:
dest: "{{ generated_inventory }}" dest: "{{ generated_inventory }}"

View File

@@ -2,6 +2,7 @@
#description: Пресет для тестирования всех доступных образов (9 хостов) #description: Пресет для тестирования всех доступных образов (9 хостов)
# Автор: Сергей Антропов # Автор: Сергей Антропов
# Сайт: https://devops.org.ru # Сайт: https://devops.org.ru
# Примечание: Astra Linux и RedOS поддерживают только linux/amd64
docker_network: labnet docker_network: labnet
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini" generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
@@ -22,7 +23,7 @@ systemd_defaults:
privileged: true privileged: true
command: "/sbin/init" command: "/sbin/init"
volumes: volumes:
- "/sys/fs/cgroup:/sys/fs/cgroup:ro" - "/sys/fs/cgroup:/sys/fs/cgroup:rw"
tmpfs: ["/run", "/run/lock"] tmpfs: ["/run", "/run/lock"]
capabilities: ["SYS_ADMIN"] capabilities: ["SYS_ADMIN"]
@@ -58,6 +59,7 @@ hosts:
- name: astra-test - name: astra-test
family: astra family: astra
groups: [test, astra] groups: [test, astra]
supported_platforms: ["linux/amd64"] # Только amd64
publish: publish:
- "8083:80" - "8083:80"
env: env:
@@ -104,6 +106,7 @@ hosts:
- name: redos-test - name: redos-test
family: redos family: redos
groups: [test, rhel] groups: [test, rhel]
supported_platforms: ["linux/amd64"] # Только amd64
publish: publish:
- "8088:80" - "8088:80"
env: env:

View File

@@ -22,7 +22,7 @@ systemd_defaults:
privileged: true privileged: true
command: "/sbin/init" command: "/sbin/init"
volumes: volumes:
- "/sys/fs/cgroup:/sys/fs/cgroup:ro" - "/sys/fs/cgroup:/sys/fs/cgroup:rw"
tmpfs: ["/run", "/run/lock"] tmpfs: ["/run", "/run/lock"]
capabilities: ["SYS_ADMIN"] capabilities: ["SYS_ADMIN"]

View File

@@ -22,7 +22,7 @@ systemd_defaults:
privileged: true privileged: true
command: "/sbin/init" command: "/sbin/init"
volumes: volumes:
- "/sys/fs/cgroup:/sys/fs/cgroup:ro" - "/sys/fs/cgroup:/sys/fs/cgroup:rw"
tmpfs: ["/run", "/run/lock"] tmpfs: ["/run", "/run/lock"]
capabilities: ["SYS_ADMIN"] capabilities: ["SYS_ADMIN"]

View File

@@ -22,7 +22,7 @@ systemd_defaults:
privileged: true privileged: true
command: "/sbin/init" command: "/sbin/init"
volumes: volumes:
- "/sys/fs/cgroup:/sys/fs/cgroup:ro" - "/sys/fs/cgroup:/sys/fs/cgroup:rw"
tmpfs: ["/run", "/run/lock"] tmpfs: ["/run", "/run/lock"]
capabilities: ["SYS_ADMIN"] capabilities: ["SYS_ADMIN"]

View File

@@ -22,7 +22,7 @@ systemd_defaults:
privileged: true privileged: true
command: "/sbin/init" command: "/sbin/init"
volumes: volumes:
- "/sys/fs/cgroup:/sys/fs/cgroup:ro" - "/sys/fs/cgroup:/sys/fs/cgroup:rw"
tmpfs: ["/run", "/run/lock"] tmpfs: ["/run", "/run/lock"]
capabilities: ["SYS_ADMIN"] capabilities: ["SYS_ADMIN"]

View File

@@ -22,7 +22,7 @@ systemd_defaults:
privileged: true privileged: true
command: "/sbin/init" command: "/sbin/init"
volumes: volumes:
- "/sys/fs/cgroup:/sys/fs/cgroup:ro" - "/sys/fs/cgroup:/sys/fs/cgroup:rw"
tmpfs: ["/run", "/run/lock"] tmpfs: ["/run", "/run/lock"]
capabilities: ["SYS_ADMIN"] capabilities: ["SYS_ADMIN"]
@@ -31,6 +31,7 @@ hosts:
- name: u1 - name: u1
family: astra family: astra
groups: [test] groups: [test]
supported_platforms: ["linux/amd64"] # Только amd64
- name: u2 - name: u2
family: alt family: alt
groups: [test] groups: [test]

View File

@@ -22,7 +22,7 @@ systemd_defaults:
privileged: true privileged: true
command: "/sbin/init" command: "/sbin/init"
volumes: volumes:
- "/sys/fs/cgroup:/sys/fs/cgroup:ro" - "/sys/fs/cgroup:/sys/fs/cgroup:rw"
tmpfs: ["/run", "/run/lock"] tmpfs: ["/run", "/run/lock"]
capabilities: ["SYS_ADMIN"] capabilities: ["SYS_ADMIN"]

View File

@@ -22,7 +22,7 @@ systemd_defaults:
privileged: true privileged: true
command: "/sbin/init" command: "/sbin/init"
volumes: volumes:
- "/sys/fs/cgroup:/sys/fs/cgroup:ro" - "/sys/fs/cgroup:/sys/fs/cgroup:rw"
tmpfs: ["/run", "/run/lock"] tmpfs: ["/run", "/run/lock"]
capabilities: ["SYS_ADMIN"] capabilities: ["SYS_ADMIN"]

View File

@@ -22,7 +22,7 @@ systemd_defaults:
privileged: true privileged: true
command: "/sbin/init" command: "/sbin/init"
volumes: volumes:
- "/sys/fs/cgroup:/sys/fs/cgroup:ro" - "/sys/fs/cgroup:/sys/fs/cgroup:rw"
tmpfs: ["/run", "/run/lock"] tmpfs: ["/run", "/run/lock"]
capabilities: ["SYS_ADMIN"] capabilities: ["SYS_ADMIN"]

View File

@@ -22,7 +22,7 @@ systemd_defaults:
privileged: true privileged: true
command: "/sbin/init" command: "/sbin/init"
volumes: volumes:
- "/sys/fs/cgroup:/sys/fs/cgroup:ro" - "/sys/fs/cgroup:/sys/fs/cgroup:rw"
tmpfs: ["/run", "/run/lock"] tmpfs: ["/run", "/run/lock"]
capabilities: ["SYS_ADMIN"] capabilities: ["SYS_ADMIN"]

View File

@@ -22,7 +22,7 @@ systemd_defaults:
privileged: true privileged: true
command: "/sbin/init" command: "/sbin/init"
volumes: volumes:
- "/sys/fs/cgroup:/sys/fs/cgroup:ro" - "/sys/fs/cgroup:/sys/fs/cgroup:rw"
tmpfs: ["/run", "/run/lock"] tmpfs: ["/run", "/run/lock"]
capabilities: ["SYS_ADMIN"] capabilities: ["SYS_ADMIN"]

View File

@@ -22,7 +22,7 @@ systemd_defaults:
privileged: true privileged: true
command: "/sbin/init" command: "/sbin/init"
volumes: volumes:
- "/sys/fs/cgroup:/sys/fs/cgroup:ro" - "/sys/fs/cgroup:/sys/fs/cgroup:rw"
tmpfs: ["/run", "/run/lock"] tmpfs: ["/run", "/run/lock"]
capabilities: ["SYS_ADMIN"] capabilities: ["SYS_ADMIN"]

View File

@@ -6,5 +6,5 @@
- name: Развертывание всех ролей - name: Развертывание всех ролей
hosts: all hosts: all
roles: roles:
- ping # - ping
# - devops - devops