Основы Ansible
Ansible — это инструмент автоматизации, работающий через SSH без необходимости установки агентов.
▸Установка
1pip install ansible2ansible --version
Инвентарь (Inventory)
▸INI формат
1# inventory.ini2[webservers]3web1.example.com4web2.example.com56[dbservers]7db1.example.com ansible_port=2289[production:children]10webservers11dbservers
▸YAML формат
1# inventory.yml2all:3 children:4 webservers:5 hosts:6 web1.example.com:7 web2.example.com:8 dbservers:9 hosts:10 db1.example.com:11 ansible_port: 22
Плейбуки
1# deploy.yml2---3- name: Deploy application4 hosts: webservers5 become: yes6 vars:7 app_version: "1.0.0"8 app_port: 3000910 tasks:11 - name: Update apt cache12 apt:13 update_cache: yes14 cache_valid_time: 36001516 - name: Install Node.js17 apt:18 name: nodejs19 state: present2021 - name: Create app directory22 file:23 path: /opt/myapp24 state: directory25 mode: '0755'2627 - name: Copy application files28 copy:29 src: ./dist/30 dest: /opt/myapp/31 owner: www-data32 group: www-data3334 - name: Install PM235 npm:36 name: pm237 global: yes3839 - name: Start application40 pm2:41 name: myapp42 script: /opt/myapp/server.js43 state: started
Роли
▸Структура роли
1roles/2 nginx/3 tasks/4 main.yml5 handlers/6 main.yml7 templates/8 nginx.conf.j29 files/10 vars/11 main.yml12 defaults/13 main.yml
▸tasks/main.yml
1---2- name: Install Nginx3 apt:4 name: nginx5 state: present67- name: Copy Nginx config8 template:9 src: nginx.conf.j210 dest: /etc/nginx/nginx.conf11 notify: Reload Nginx1213- name: Ensure Nginx is running14 service:15 name: nginx16 state: started17 enabled: yes
▸handlers/main.yml
1---2- name: Reload Nginx3 service:4 name: nginx5 state: reloaded
▸templates/nginx.conf.j2
1worker_processes {{ nginx_worker_processes }};23events {4 worker_connections {{ nginx_worker_connections }};5}67http {8 server {9 listen {{ nginx_port }};10 server_name {{ nginx_server_name }};1112 location / {13 proxy_pass http://127.0.0.1:{{ app_port }};14 }15 }16}
Переменные
1# group_vars/webservers.yml2nginx_worker_processes: 43nginx_worker_connections: 10244nginx_port: 805app_port: 300067# host_vars/web1.yml8nginx_server_name: web1.example.com
Шаблоны (Jinja2)
1# config.yml.j22database:3 host: {{ db_host }}4 port: {{ db_port | default(5432) }}5 name: {{ db_name }}67features:8{% for feature in enabled_features %}9 - {{ feature }}10{% endfor %}
Теги
1# Запуск с тегами2ansible-playbook deploy.yml --tags "install,config"34# Пропуск тегов5ansible-playbook deploy.yml --skip-tags "test"
Команды
1# Проверка инвентаря2ansible-inventory -i inventory.ini --list34# Ping всех хостов5ansible all -m ping -i inventory.ini67# Запуск плейбука8ansible-playbook deploy.yml -i inventory.ini910# Сухой прогон11ansible-playbook deploy.yml --check1213# Limit к хосту14ansible-playbook deploy.yml --limit web1.example.com
Заключение
Ansible позволяет автоматизировать настройку и управление серверами без агентов. Плейбуки, роли и шаблоны предоставляют декларативный подход к infrastructure automation.