Skip to main content

Установка и первоначальная настройка Ansible на Ubuntu 24.04

image.png

Цель: быстро и правильно поставить Ansible с учётом «externally managed» (PEP 668) и сделать первый запуск.
Суть: не ставим пакеты в системный Python через pip. Используем APT (ansible-core), либо pipx (полный ansible), либо PPA.


1) Установка (выбери один из путей)

Вариант 1 — APT (поддерживаемый дистрибутивом, ставит ядро)

sudo apt update
sudo apt install ansible-core
ansible --version

Вариант 2 — pipx (изолированно, ставит «полный» ansible)

sudo apt update
sudo apt install pipx
pipx ensurepath
pipx install --include-deps ansible
ansible --version

Вариант 3 — Официальный PPA (пакетный «полный» ansible)

sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository --yes --update ppa:ansible/ansible
sudo apt install ansible
ansible --version

Почему так: PEP 668 запрещает системный pip install ansible без изоляции. Если очень нужно — существует pip install ... --break-system-packages (не рекомендуется).


2) Подготовка рабочей директории

mkdir -p ~/ansible-projects/{inventories,playbooks,roles,group_vars,host_vars}
cd ~/ansible-projects

3) Минимальный ansible.cfg

Создай ansible.cfg в корне проекта:

[defaults]
inventory = ./inventories/inventory.ini
# Проверку ключей лучше не отключать. Примем новые ключи автоматически:
host_key_checking = True
[ssh_connection]
ssh_args = -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=accept-new
pipelining = True

[privilege_escalation]
become = True
become_method = sudo

4) SSH-ключ и доступ

# Создать ключ
ssh-keygen -t ed25519 -C "ansible@yourdomain"

# Залить ключ на хост
ssh-copy-id username@server_ip

5) Мини-инвентори и первый пинг

Создай inventories/inventory.ini:

[test]
test-server ansible_host=192.168.1.100 ansible_user=username

[all:vars]
ansible_python_interpreter=/usr/bin/python3

Проверка:

ansible all -m ping       # если inventory указан в ansible.cfg
# или
ansible all -i inventories/inventory.ini -m ping

Успех выглядит так:

test-server | SUCCESS => {"changed": false, "ping": "pong"}

6) Коллекции (когда нужен функционал вне ядра)

ansible-core — это движок. Нужные модули берём коллекциями:

ansible-galaxy collection install community.general

7) Обновления

  • APT (ansible-core): sudo apt update && sudo apt upgrade

  • pipx (ansible): pipx upgrade ansible

  • PPA (ansible): sudo apt update && sudo apt upgrade


8) Куда что установилось

  • Проект: ~/ansible-projects

  • Конфиг: ~/ansible-projects/ansible.cfg

  • Инвентори: ~/ansible-projects/inventories/inventory.ini

  • Ключи SSH: ~/.ssh/


9) Короткие проверки

ansible --version
ansible all --list-hosts
ansible all -m command -a "uname -a"
ansible all -m command -a "df -h"

Памятка по безопасности

  • Используй SSH-ключи вместо паролей.

  • Не отключай host_key_checking; вариант accept-new удобен и безопаснее глобального False.

  • Разделяй окружения: APT для «ядра», pipx/venv для приложений и сценариев.