Ansible — система управления конфигурациями, написанная на языке программирования Python, с использованием декларативного языка разметки для описания конфигураций. Применяется для автоматизации настройки и развёртывания программного обеспечения.
Для вашего узла управления (компьютера, на котором работает Ansible) вы можете использовать практически любую UNIX-подобную машину с установленным Python 3.9 или новее. Сюда входят Red Hat, Debian, Ubuntu, macOS, BSD и даже Windows с подсистемой Linux (WSL).
Управляемый узел (компьютер, которым управляет Ansible) не требует установки Ansible, но требует Python 2.7 или Python 3.5 - 3.11 для запуска кода Python, созданного Ansible. Управляемому узлу также требуется учетная запись пользователя, которая может подключаться к узлу через SSH с помощью интерактивной оболочки POSIX.
Установка на Ubuntu , Debian
sudo apt -y install ansible
Вы можете создать полностью закомментированный файл примера, например:ansible.cfg
ansible-config init --disabled > ansible.cfg
Вы также можете иметь более полный файл, включающий существующие плагины:
ansible-config init --disabled -t all > ansible.cfg
Вы можете использовать их в качестве отправных точек для создания собственного файла.
Минимальный файл конфигурации Ansible имеет название ansible.cfg и содержит:
[defaults]
inventory = hosts
remote_user = root
private_key_file = /opt/ansible/keys/hyperv.key
host_key_checking = False
Пример файла инвертаризации:
[gate]
gate1 ansible_host=192.168.100.2 ansible_port=22
gate2 ansible_host=192.168.100.3 ansible_port=22
Что бы проверить содержимое файла инвертаризации используем заклинание (находясь в папке с файлом, разумеется):
ansible-inventory --graph
Существует множество модулей для Ansible . Они отлично описаны в справке на сайте самой программы. Вот несколько примеров. Используя модуль shell я просто передавал команду на каждый нужный мне сервер и собирал информацию о процессорах:
Количество ядер
sudo ansible all -m shell -a 'cat /proc/cpuinfo | grep processor | wc -l'
Архитектура процессора
sudo ansible all -m shell -a 'lscpu | grep Architecture'
Модель процессора
sudo ansible all -m shell -a 'lscpu | grep "Model name:"
Довольно любопытной мне показалась возможность быстро собрать иформацию о дисках и занятом пространстве на серверах:
ansible all -a "df -h" -u root
Проверить доступность хостов и правильность настройки можно используя модуль ping
ansible -m ping all
Вывод будет примерно таким:
vm_ltsp1 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
localhost | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
vm_observium | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
vm_docker | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
vm_phpipam | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
Так же можно собрать информацию о железе модулем setup
ansible -i /opt/ansible/hosts -m setup -a 'filter=ansible_processor' all
Для запуска нужно находится в той папке, где лежит файл конфигурации и файл с хостами и указать где лежит сам playbook.
Запуск playbook:
sudo ansible-playbook /opt/ansible/playbooks/playbook_ping.yml
Перед использованием Playbook существует возможность проверки правльности его синтаксиса:
ansible-playbook --syntax-check plbook_ping.yml
Установить список пакетов:
---
- name: Install_soft
hosts: gate
tasks:
- name: Install Soft
ansible.builtin.apt:
name:
- mc
- lnav
- neofetch
- bind9
- isc-dhcp-server
- zabbix-agent
- cockpit
state: present
Пинг указанных хостов:
---
- name: Ping Servers
hosts: gate
become: yes
tasks:
- name: Task Ping
ping:
Обновлене пакетов на всех хостах:
---
- name: Update Package
hosts: all
tasks:
- name: Update all packages to their latest version
ansible.builtin.apt:
name: "*"
state: latest
Установить SNMP, подменить конфиг и перезапустить службу:
---
- name: InstallSNMPD_v2
hosts: stend
tasks:
- name: Install snmpd
ansible.builtin.apt:
name: snmpd
state: present
- name: Copy config File
copy:
src: /opt/ansible/conf/snmpd.conf
dest: /etc/snmp
mode: 0777
- name: Restart service SNMPD
ansible.builtin.service:
name: snmpd
state: restarted
Выполнить произвольную команду на удаленных серверах:
---
- hosts: gate
become: yes
tasks:
- name: set timezone Samara
shell: timedatectl set-timezone Europe/Samara
Или собраить их в один:
---
- name: Install_new_server
hosts: new
tasks:
- name: update_pkg
ansible.builtin.apt:
name: "*"
state: latest
- name: del_pgk
ansible.builtin.apt:
name:
- nftables
state: absent
- name: install_pkg
ansible.builtin.apt:
name:
- mc
- lnav
- neofetch
- sudo
- snmpd
- rsyslog
- rsync
- iptables
- tcpdump
state: present
- name: clean_cache
ansible.builtin.apt:
autoclean: yes
- name: remove_dependencies
ansible.builtin.apt:
autoremove: yes
- name: copy_snmpd_conf
copy:
src: /opt/ansible/conf/snmpd.conf
dest: /etc/snmp
mode: 0600
- name: restart_snmpd
ansible.builtin.service:
name: snmpd
state: restarted
- name: set_timezone
shell: timedatectl set-timezone Europe/Samara
- name: set shell command
shell: echo "PATH=/sbin/:$PATH" >> /root/.bashrc