Блог bitmanager

Автопродление сертификата VPN при помощи Ansible

Если за предыдущий плейбук Ansible с бэкапом Mikrotik-ов меня должны были проклясть, то за этот точно распнут. Так как это не только плейбук, который идемпонентен, так еще и подчеркивает свою идемпонентность максимально наглым способом, используя shell. Но тем не менее возможно кому-то пригодится.

У нас есть OpenVPN сервер, который связывает нас со всеми клиентами. И на этом сервере есть CRL-список отозванных сертификатов, чтобы периодически отключать провинившихся. Сам CRL-список имеет срок действия 30 дней. Раньше мне приходилось раз в 30 дней подключаться к серверу и обновлять его руками. Но теперь у меня есть супершвабра... так, это из другой оперы. Теперь за меня все делает Ansible по следующему сценарию.


# Обновление списка CRL OpenVPN.

- hosts: localhost
   connection: local
   gather_facts: no
   tasks:
      - name: Создание нового CRL файла
         shell: source vars && openssl ca -gencrl -cert keys/ca.crt -keyfile keys/ca.key -out keys/crl.pem -config openssl.cnf
         args:
            chdir: /usr/share/easy-rsa
            executable: /bin/bash
      - name: Перезапуск OpenVPN
         systemd:
            name: openvpn
            state: restarted

Обратите внимание на две строчки. connection: local говорит, что плейбук должен выполняться на локальной машине и подключаться никуда не надо. gather_facts: no указывает, что собирать файты не надо. Они просто не нужны, а на старте их сбор занимает время.

Проигрывается плейбук по крону, вот такой незатейливой командой:
0 0 */20 * * /usr/bin/ansible-playbook -i /etc/ansible/hosts /etc/ansible/update-crl.yml > /dev/null 2>&1
Записки сисадмина