CloudFlare хорош всем: и удобный интерфейс управления DNS, и кеширование сайтов, и даже защита от DDOS и проверки версии браузера.
Но есть в его бесплатной версии один недостаток - никаких гарантий, что завтра все продолжит работать также, как и сегодня. И если в платной можно выпросить какой-то SLA, неустойки и прочие, то с бесплатными в случае проблем - даже разговаривать не будут (в случае серъезных проблем).
Поэтому, при переносе важных сайтов на CloudFlare возникла мысль: “А что делать, если завтра CF перестанет отвечать?”
К счастью, CF предоставляет удобный API, с помощью которого можно получать, редактировать и удалять любую информацию, используемую в аккаунте.
Поэтому, берем в руки Python и пишем тулзу, которая будет выдергивать все DNS из аккаунта, превращать полученный JSON в файлы зон, понятные BIND и складывать их куда-нибудь себе. Например в гит.
Замечу, что поиск в интернете выдал лишь два готовых варианта такой тулзы, но одна из них в качестве npm пакета, а вторая на руби и без конвертирования - только голый JSON.
Поэтому, параллельно с написанием кода, появилось желание такой тулзой поделиться с общественностью (а равно и хороший шанс узнать, как же всё-таки писать python пакеты и деплоить их на pypi)
В результате, получаем пакет, который легко устанавливается командой
pip install cloudflaredns-backup
После установки пакет предоставляет нам библиотеку cloudflaredns_backup и утилиту cf-backup, ради которой он и ставится.
Простейший пример запуска:
cf-backup [email protected] CF_TOKEN -o output_dir
Потом мне этого показалось мало, и утилитка обзавелась ключом -z, в который можно либо передать имя зоны (можно использвать ключ несколько раз, как cf-backup -z example.com -z example2.com), либо передать список зон в кавычках, разделенные пробелом.
Потом разрешил не указывать директорию для файлов, а выводить просто на stdout, правда так и не придумал, кому могут понадобиться все зоны в одном файле.
cf-backup работает как в окружении Python2, так и Python3, единственная внешняя зависимость - модуль requests.
Исходники, предложения и правки принимаю с удовольствием на GitHub Пакет для скачивания доступен на PyPI