К Vagrant 3.0

Кvagrant30

HashiCorp Vagrant начинался как небольшой проект, призванный упростить взаимодействие с виртуальными машинами для локальной разработки. Растущее сообщество разработчиков, операторов, дизайнеров и продуктов полагается на Vagrant. Преследуя цель продолжать улучшать Vagrant, мы обнаружили путь, который позволит перенести Vagrant на Go и по-прежнему поддерживать его функции на основе Ruby. В этом посте мы обсудим, как переход на кодовую базу Go будет поддерживать не только среды разработчиков последнего десятилетия, но и новые рабочие процессы, среды и экосистемы разработки.

Изменения, которые мы разрабатываются, чтобы позволить вам запускать Vagrant с архитектурой клиент-сервер, лучше защищать его в различных операционных системах и управлять его конфигурацией в глобальном масштабе. Они также предложат более плавный опыт разработки плагинов, улучшив переносимость плагинов и упростив управление пакетами.

В течение следующего года Vagrant 2.3 и 2.4 не нарушат обещаний совместимости Vagrantfiles или интерфейсов плагинов. Vagrant 3.0 представит новые методы настройки, но сохранит инструменты для постоянной совместимости Vagrantfiles. Это включает обнаружение Ruby Vagrantfiles и установку помощников по совместимости, чтобы минимизировать прерывания рабочего процесса пользователя. Хотя у нас еще нет конкретных временных рамок, мы объявим о наших планах относительно этих новых версий Vagrant по мере их утверждения в течение следующих нескольких месяцев.

» Улучшения и новые функции

Вы можете рассчитывать на множество новых функций, возможностей и улучшений, которые стали возможными благодаря этим обновлениям архитектуры Vagrant:

» Архитектура клиент-сервер

Новая архитектура позволит вам запускать Vagrant на удаленном хосте и защищать действия на машине. Вы сможете установить Vagrant на ресурсоемкую машину и взаимодействовать с ним на тонком клиенте, что позволит разделить одну среду Vagrant между несколькими членами команды.

Новый клиент – Модель сервера упростит совместное использование конфигурации и ресурсов, а также предоставит администраторам власть над привилегированными действиями Vagrant. Это упрощает взаимодействие, предлагаемое существующим плагином Vagrant Share . Вы по-прежнему сможете запускать Vagrant локально на настольном компьютере и использовать новые возможности безопасности.

Безопасность

Vagrant запускается как пользовательский процесс, который требует согласия пользователя для выполнения привилегированных действий. Вы можете обойти запрос и принятие на платформах POSIX, используя sudoers для определения каждой команды Vagrant с расширенными привилегиями. К сожалению, вам необходимо обновлять этот файл каждый раз, когда вы меняете привилегированные команды Vagrant. В системах Windows вы не можете использовать файл sudoers . Вместо этого вы должны подтвердить запрос управления учетными записями пользователей (UAC), что затрудняет запуск Vagrant в автономном контексте. Vagrant 3.0 позволит привилегированной службе выполнять известные и надежные команды из Vagrant и его плагинов без необходимости прямого взаимодействия с пользователем.

В дополнение к более точному управлению надежными командами вы сможете использовать элементы управления для предотвращения автоматической оценки Vagrantfiles на основе Ruby. Вы также сможете писать конфигурацию на языке конфигурации HashiCorp (HCL), чтобы ограничить вероятность ошибок или рисков, связанных с динамической конфигурацией. Это предотвращает выполнение произвольного кода, встроенного в Vagrantfiles.

» Глобальное управление конфигурацией

В настоящее время вы можете ссылаться только на свою локальную конфигурацию Vagrant. Разные пользователи одной системы не имеют доступа к одной и той же конфигурации. Новый серверный подход позволит управлять глобальной конфигурацией Vagrant, которую вы также можете сохранить в базе данных. Это исправит давно существующие проблемы , когда информация, зависящая от поставщика, приводит к потере параметров конфигурации. Потеря настроек может привести к неожиданным и непреднамеренным модификациям системы.

Глобальное управление конфигурацией помогает организовать состояние Vagrant и закладывает основу для добавления веб-интерфейса, проверки ошибок и взаимодействия на основе транзакций. Это повышает устойчивость Vagrant к плохим изменениям. Обновление также решит проблемы, связанные с тем, что индексный файл Vagrant становится слишком большим или слишком хрупкое .

» API плагина и переносимость

Пока существующий API плагина Ruby будет по-прежнему поддерживаться, Vagrant будет поддерживать новый API плагина с помощью Библиотека плагинов для работы HashiCorp . Авторы плагинов смогут создавать плагины Vagrant на Go или любом другом языке с поддержкой GRPC. SDK плагина предоставит общие утилиты и помощники для разработки плагинов.

Вы сможете переносить плагины, написанные с новым API, на разные платформы и выпускать их независимо от выпусков Vagrant. Кроссплатформенность скомпилированного плагина Go упростит распространение и использование за счет упрощения текущих требований для сложного управления зависимостями.

» Принесите свой собственный Ruby

Давняя проблема с некоторыми плагинами и упаковка сторонних дистрибутивов Vagrant вращается вокруг Vagrant, поставляющего свой собственный Ruby. Это вызывает трение, когда вы хотите запустить Vagrant на последних версиях Ruby или когда подключаемые модули Ruby зависят от пакетов, которые требуют определенных библиотек . Отказ от объединения Ruby с Vagrant даст пользователям больше контроля над средой выполнения Ruby. Например, такие системы, как Arch или Fedora, которые распространяют свой собственный пакет Vagrant, могут безопасно зависеть от системного Ruby.

» Использование экосистемных библиотек

Мы разработали ряд библиотек Go для других продуктов HashiCorp и других инструментов инфраструктуры от различных поставщиков и сообществ. Переход на Go позволит Vagrant более полно присоединиться к этому сообществу, получив возможность использовать (и вносить свой вклад) в уже существующие инструменты, а также опираться на опыт Go, существующий в Hashicorp.

Инструменты HashiCorp, такие как go-plugin и блеск помог нам изучить возможности написания Vagrant in Go с сохранением обратной совместимости. В дальнейшем другие библиотеки Go позволят Vagrant поддерживать широкий спектр новых плагинов. Например, вы можете использовать привязки Go для различных программ виртуализации, чтобы создавать новые плагины для многих других серверных программ.

» Экстернализация плагина

У Vagrant больше, чем 10657 встроенные плагины. Это распространение привело к появлению новых ограничений для развития. В настоящее время любое исправление, которое может потребоваться для встроенного плагина, зависит от всего Vagrant, прежде чем он может быть выпущен. С Vagrant 3.0, поскольку мы продолжаем улучшать API плагинов и переносимость, мы можем извлекать плагины из Vagrant, чтобы вы могли обновлять их быстрее и проще.

Основное внимание будет уделяться провайдеру и провайдеру. плагины. Как только эти плагины будут вынесены во внешний вид, вы сможете обновлять плагины провайдера и провайдера независимо от Vagrant. Командные плагины останутся внутренними и по-прежнему будут зависеть от цикла выпуска Vagrant.

» Планируемые вехи

Мы понимаем, что перенос проекта на другой язык может быть разрушительным, поэтому мы стремимся сделать его максимально удобным. Мы не будем отказываться от каких-либо интерфейсов или функций, которые вам потребуются как конечному пользователю Vagrant или разработчику плагинов во время этого процесса. Сначала мы портируем ядро ​​Vagrant to Go. Как только это станет стабильным, мы будем работать над встроенными плагинами. Этот итеративный процесс обеспечивает полную совместимость между средами выполнения Go и Ruby Vagrant, что является требованием для того, чтобы наши собственные встроенные плагины оставались работоспособными.

Мы распространим эти изменения на два второстепенных выпуска и один основной. релиз:

» Vagrant 2.3

Версия Vagrant 2.3 будет включать начальную альфа-версия реализации Vagrant на основе Go. Он будет поставляться в пакетах установщика Vagrant и доступен как дополнительный исполняемый файл. Вы сможете выбрать использование новой реализации, но можете столкнуться с некоторой нестабильностью. На протяжении всего цикла выпуска Vagrant 2.3 мы будем работать над стабилизацией реализации Vagrant на основе Go и начнем портировать встроенные плагины. Команда vagrant продолжит запускать традиционный Ruby- реализация Vagrant на основе.

» Бродяга 2.4

Бродяга Версия 2.4 будет включать новую реализацию Vagrant на Go в качестве основного исполняемого файла. Он будет включать команду миграции, которая будет импортировать существующие данные из домашнего каталога и каталога проекта Vagrant. Vagrantfiles также будет поддерживать HCL и структуры данных.

Мы сосредоточимся на выявлении и решении проблем совместимости в цикле выпуска Vagrant 2.4. Вы по-прежнему сможете использовать реализацию на основе Ruby, используя альтернативный исполняемый файл. Основываясь на отзывах и постоянстве пользовательского опыта в серии 2.4, у нас могут быть дополнительные выпуски серии 2.x.

» Vagrant 3.0

Версия Vagrant 3.0 будет включать только реализацию Vagrant на основе Go. По умолчанию он поддерживает только плагины, использующие новый API и Vagrantfiles на основе HCL. Пакет установщика больше не будет включать Ruby и дополнительные зависимости, необходимые для запуска реализации Vagrant на основе Ruby.

Вы по-прежнему сможете использовать Vagrantfiles и плагины Vagrant на основе Ruby. Однако вам нужно будет установить Ruby в хост-системе. Vagrant обнаружит использование Vagrantfile или плагина на основе Ruby и предложит вам инструкции по установке Ruby на вашей платформе. После установки Vagrantfiles и плагины на основе Ruby будут нормально работать.

» Заключение

От новой реализации на основе Go до экстернализации плагинов – мы разрабатываем Vagrant 3.0, чтобы обеспечить основу для интеграции с новыми средами разработки, сохраняя при этом среды последнего десятилетия. Мы надеемся сделать эти изменения доступными, чтобы помочь вам расширить использование и развитие Vagrant. Если у вас есть отзывы о наших планах по Vagrant или вы хотите задать вопросы по этому поводу, ответьте, оставив комментарий в наша тема на форуме Vagrant .

Leave a comment

Your email address will not be published. Required fields are marked *