Hashicorp Vagrant开始作为一个小项目,使与本地开发的虚拟机交互。越来越多的开发人员,运营商,设计师和产品依赖于流浪者。在追求目标继续改进流浪汉时,我们发现了一条允许移植的路径,以便移植到仍然支持其基于Ruby的功能。在此帖子中,我们将讨论对Go代码库的迁移程度如何,不仅会支持过去十年的开发人员环境,而且还支持新的开发工作流,环境和生态系统。
我们正在进行的更改现在旨在允许您使用客户端 - 服务器架构运行Vagrant,在不同的操作系统上更好地保护它,并在全球管理其配置。通过提高插件的可移植性以及降低包装管理的复杂性,它们还将提供更无缝插件开发经验。
在明年,Vagrant 2.3和2.4不会破坏Vagrantfiles或Plugin接口的兼容性承诺。 Vagrant 3.0将引入新的配置方法,但保留工具以继续兼容Vagrantfiles的兼容性。这包括对Ruby VagrantFiles的检测和安装兼容性助手,以最大限度地减少对用户工作流程的中断。虽然我们没有具体的时间框架,但我们将在未来几个月内凝固这些新版本的流浪汉计划。
您可以期待这些更新的许多新功能,功能和改进,以通过这些更新为VAGRANT的架构提供:
新架构将允许您在远程主机上运行Vagrant并在机器上安全。您将能够在资源密集型计算机上安装Vagrant并在瘦客户端上与其交互,这将允许在多个团队成员之间共享一个VAGRANT环境。
新的客户端 - 服务器模型将易于分享配置和资源,同时还提供管理员over vagrant的特权操作。这简化了现有的VAGRANT共享插件提供的协作经验。您仍然可以在桌面机器上本地运行Vagrant,并使用新的安全功能。
VAGRANT作为用户进程运行,需要从用户接受以运行特权操作。您可以使用sudoers文件对Posix平台的请求和验收,以定义具有升级权限的每个vagrant命令。不幸的是,您需要随时更改特权VAGRANT命令时更新此文件。在Windows系统上,您无法使用sudoers文件。相反,您必须确认用户帐户控制(UAC)提示,这使得在无头脑中难以运行VAGRANT。 VAGRANT 3.0将启用特权服务来从VAGRANT及其插件执行已知和可信命令,而无需直接用户交互。
除了更精细地控制受信任命令之外,您将能够使用控件来防止自动评估基于Ruby的Vagrantfiles。您还将能够在Hashicorp配置语言(HCL)中编写配置,以限制来自动态配置引起的错误或风险的可能性。这可以防止VagrantFiles中的任意代码执行内联。
目前,您只能引用自己的本地vagrant配置。同一系统上的不同用户无法访问相同的配置。一种新的基于服务器的方法将允许管理全局VAGRANT配置,您还可以存储在数据库中。这将修复提供者特定信息导致丢失配置设置的长期问题。丢失的设置可能导致意外和意外的系统修改。
全局配置管理有助于组织Vagrant的状态,并为添加基于Web的UI,错误检查和基于事务的交互而奠定基础。这改善了Vagrant的恢复力对糟糕的变化。更新还将解决Vagrant的索引文件周围的问题,而不是太大或太脆弱。
虽然将继续支持现有的Ruby Plugin API,但Vagrant将在Hashicorp Go-Plugin库的帮助下支持一个新插件API。插件作者将能够以GO或GRPC支持的任何其他语言创建Vagrant插件。插件SDK将为插件开发提供常用实用程序和帮助程序。
您将能够跨平台与新API写入的插件,并独立于VAGRANT的版本释放它们。编译的Go插件' S跨平台功能将通过简化复杂依赖管理的当前要求来轻松分配和使用。
具有某些插件和第三方分布的长期问题,包装流浪汉围绕着流浪者围绕着自己的红宝石。当您想要在最新版本的Ruby或Ruby插件依赖于需要特定库的软件包时运行Vagrant时会导致摩擦。远离捆绑红宝石的流浪汉将使用户更加控制Ruby运行时。例如,诸如分布自己的Vagrant包的arch或fedora等系统可以安全地依赖于系统Ruby。
我们开发了各种供应商和社区的其他Hashicorp产品和其他基础设施的Go图书馆。搬家将允许流浪者更充分地加入这个社区,获得使用(并贡献)已经存在的工具的能力,以及凭借Hashicorp存在的Go专业知识。
Go-Plugin和Glint等Hashicorp工具帮助我们探讨了在维护向后兼容的过程中围绕写作流浪汉的可能性。向前迈进,其他Go库将允许流浪者容纳各种新插件。例如,您可以为不同的虚拟化软件使用Go绑定来构建新插件的更多后端。
Vagrant拥有超过70个内置插件。这种扩散引入了新的发展限制。目前,内置插件可能需要的任何修复都依赖于可以在释放之前的整个流浪汉。使用VAGRANT 3.0,随着我们继续提高插件API和可移植性,我们可以从VAGRANT中提取插件,以便您可以更快更轻松地更新它们。
重点将主要是在提供者和便州插件上。一旦这些插件都是外部化的,您就可以升级无关的提供商和便携式插件。命令插件将保持内部,仍然依赖于Vagrant的发布周期。
我们认识到将项目移植到另一种语言可能是破坏性的,因此我们的目标是使其尽可能无缝。在此过程中,我们不会弃用您在Vagrant最终用户或插件开发人员所需的任何接口或功能。首先,我们将港口港口陷入困境。一旦稳定,我们将在内置插件上工作。此迭代过程可确保Go和Ruby Vagrant运行时完全兼容,这是我们自己内置插件的要求保持功能。
Vagrant 2.3版本将包括基于Go的Vagrant实现的初始alpha版本。它将在Vagrant Installer软件包中发货,并作为可选的可执行文件提供。您将能够选择使用新的实现,但您可能会遇到一些不稳定。在整个VAGRANT 2.3发布周期中,我们将努力稳定基于GO的VAGRANT实现并开始港口内置插件。 VAGRANT命令将继续运行传统的基于Ruby的VAGRANT实现。
vagrant 2.4版本将具有新的Go vagrant作为主要可执行文件实现。它将包含迁移命令,该命令将导入Vagrant Home和项目目录的现有数据。 VAGRANTFILES还将支持HCL和数据结构。
我们将专注于识别和解决Vagrant 2.4发布周期中的兼容性问题。您仍然能够使用备用可执行文件使用基于Ruby的实现。根据反馈和2.4系列中用户体验的一致性,我们可能有额外的2.x系列版本。
VAGRANT 3.0版本只包含基于GO的VAGRANT实现。默认情况下,它只支持使用新API和基于HCL的VAGRANTFILE的插件。安装程序包将不再包含Ruby,也不包含运行基于Ruby的VAGRANT实现所需的额外依赖项。
您仍然可以使用基于Ruby的VagrantFiles和Vagrant插件。但是,您需要在主机系统上安装Ruby。 VAGRANT将检测基于RUBY的VAGRANTFILE或插件使用,并提示您使用在您的平台上安装RUBY的说明。一旦安装,基于Ruby的VagrantFiles和插件将正常工作。
从新的GO-COMPETION of Plugins的外部化,我们正在设计VAGRANT 3.0,为实现与新开发人员环境的基础,同时保持上一十年的环境。我们期待使这些更改可用于帮助您扩展Vagrant的使用和开发。如果您有关于我们的VAGRANT计划的反馈,或者想提出关于它的问题,请回复我们在VAGRANT论坛上的课题中的评论。