Бекап конфигов серверов при помощи 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, перестал работать, то и бакапы не делаются ?
Да, это же не какой то самостоятельный процесс, а плейбук его