Бекап конфигов серверов при помощи 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`а раз в неделю и имеем актуальную копию конфигов «на всякий случай».

2 ответа на “Бекап конфигов серверов при помощи Ansible”

Добавить комментарий