Бекап конфигов серверов при помощи Ansible
После переезда и разнесения всех сервисов по разным виртуальным машинам, вопрос о бекапе конфигов стал чуточку более геморным, недели раньше. Подумав некоторое время о том — как же лучше организовать этот процесс, я решил сделать это при помощи Ansible.
Сначала я написал небольшой bash-скрипт, который в цикле запускал playbook для каждого сервера, потом подумав о том, как можно это дело упростить, вспомнил об использовании конструкции when и стандартных параметрах системы, получаемых Ansibl`ом. В итоге скрипт стал проще, нужно было указать лишь какие конфиги для какого сервера нужно копировать. А функция fetch замечательно стягивала конфиги с удалённой машины и клала на NFS шару, сохраняя при этом структуру директорий.
- hosts: all
user: korp
sudo: yes
vars:
DESTINATION: /mnt/nas/config/{{ansible_date_time.date}}
tasks:
- name: Copy Server.properties
fetch: src=/home/korp/AirVideoServerHD/Server.properties dest={{ DESTINATION }}
when: ansible_hostname == 'airvideoserverhd'
- name: Copy httpd.conf
fetch: src=/etc/httpd/conf/httpd.conf dest={{ DESTINATION }}
when: ansible_hostname == 'apache'
- name: Copy dhcpd.conf
fetch: src=/etc/dhcp/dhcpd.conf dest={{ DESTINATION }}
when: ansible_hostname == 'dhcp'
- name: Copy named.conf
fetch: src=/etc/named.conf dest={{ DESTINATION }}
when: ansible_hostname == 'dns'
- name: Copy korphome.local.zone
fetch: src=/var/named/korphome.local.zone dest={{ DESTINATION }}
when: ansible_hostname == 'dns'
- name: Copy 1.168.192.in-addr.arpa.zone
fetch: src=/var/named/1.168.192.in-addr.arpa.zone dest={{ DESTINATION }}
when: ansible_hostname == 'dns'
- name: Copy nginx.conf
fetch: src=/etc/nginx/nginx.conf dest={{ DESTINATION }}
when: ansible_hostname == 'nginx'
- name: Copy php.ini
fetch: src=/etc/php.ini dest={{ DESTINATION }}
when: ansible_hostname == 'nginx'
- name: Copy owncloud.conf
fetch: src=/etc/httpd/conf.d/owncloud.conf dest={{ DESTINATION }}
when: ansible_hostname == 'owncloud'
- name: Copy firewall.sh
fetch: src=/root/firewall.sh dest={{ DESTINATION }}
when: ansible_hostname == 'router'
- name: Copy server.conf
fetch: src=/etc/openvpn/server.conf dest={{ DESTINATION }}
when: ansible_hostname == 'router'
Настраиваем запуск playbook`а раз в неделю и имеем актуальную копию конфигов «на всякий случай».
Очень интересно и познавательно все описано. Спасибо! только вот не понятно — как чистить старые бэкапы?
Можно как то так
find /mnt/backup/config -type d -ctime +14 -exec rm -rf {} \;
удалит в /mnt/backup/config директории старше 14 дней
Если ansible, перестал работать, то и бакапы не делаются ?
Да, это же не какой то самостоятельный процесс, а плейбук его