Месяц назад письмо попало в список рассылки OpenStack под названием « Сообщество OpenStack приветствует разработчиков на всех языках программирования ». Возможно, вы знаете, что OpenStack по сути построен с использованием Python, и поэтому он является эталонным языком для реализаций клиентских библиотек. Как практикующий Lisp и OpenStack, я использовал это оправдание, чтобы создать для себя проблему: давайте докажем это, введя Lisp в OpenStack!
Добро пожаловать cl-openstack-client , клиентская библиотека OpenStack для Common Lisp !
Проект размещен в классической инфраструктуре OpenStack для стороннего проекта StackForge . Он предоставляет систему непрерывной интеграции на основе Jenkins и инфраструктуры Gerrit, используемой для анализа вкладов.
Как работают тесты
Проекты OpenStack выполняли потрясающий рабочий процесс, о котором я уже говорил , на основе таких инструментов, как Gerrit и Jenkins .
Проекты OpenStack Python используются для запуска tox , для создания виртуальной среды и запуска тестирования внутри. Насколько я знаю, в Common Lisp такого нет, поэтому мне пришлось создать его самому.
К счастью, используя Quicklisp , невероятный эквивалент PyPI Python, было очень легко его настроить. cl-openstack-client просто включает базовый сценарий оболочки, который выполняет следующие действия:
- Скачать quicklisp.lisp
- Запустите программу на Лиспе, чтобы установить зависимости с помощью Quicklisp
- Запустите программу на Лиспе, запустив набор тестов с использованием FiveAM , который завершается с 0 или 1 в зависимости от результатов тестирования.
Я просто запустил тест с использованием SBCL , хотя добавление компилятора в таблицу было бы действительно хорошим планом в будущем и должно быть простым. Вы можете полюбоваться журналом успешного запуска теста, выполненного, когда я предложил патч через Gerrit, чтобы проверить, как он выглядит.
Implementation status
For the curious, here’s an example of how it works:
* (require 'cl-openstack-client) * (use-package 'cl-keystone-client) * (defvar k (make-instance 'connection-v2 :username "demo" :password "somepassword" :tenant-name "demo" :url "http://devstack:5000")) K * (authenticate k) ((:ISSUED--AT . "2013-07-04T05:59:55.454226") (:EXPIRES . "2013-07-05T05:59:55Z") (:ID . "wNFQwNzo1OTo1NS40NTQyMthisisaverylongtokenwNFQwNzo1OTo1NS40NTQyM") (:TENANT (:DESCRIPTION) (:ENABLED . T) (:ID . "1774fd545df4400380eb2b4f4985b3be") (:NAME . "demo"))) * (connection-token-id k) "wNFQwNzo1OTo1NS40NTQyMthisisaverylongtokenwNFQwNzo1OTo1NS40NTQyM"
Unfortunately, the implementation is far from being complete. It only implements for now the Keystone token retrieval.
I’ve actually started this project to build an already working starting point. With this, future potential contributors will be able to spend efforts on writing code, and not on setting up the basic continuous integration system or module infrastructure.
If you wish to help me and contribute, just follow the OpenStack Gerrit workflow howto or feel free to come by me and ask any question (I’m hanging out on #lisp on Freenode too).
See you soon, hopping to bring more Lisp into OpenStack!