将 EC2 样式的用户数据传递给 virtualbox/vagrant VM

将 EC2 样式的用户数据传递给 virtualbox/vagrant VM

我正在尝试使用 Vagrant 和 Fabric(通过 cloudbiolinux)在 VirtualBox 中设置 clusterman/galaxy VM,关键步骤是将“用户数据”参数传递给 VM。目前尚不清楚(至少对我来说)如何将其注入 VM。

我如何将等效项传递给由 vagrant 管理的 VirtualBox VM(假设 vagrant 是这里的一个重要变量)?

答案1

它在 AWS 中的工作原理:

AWS 使用 API 来获取 VM 可见的元数据和用户数据。用户数据的重要之处在于最终结果;通常是显示变量或运行脚本。在这两种情况下,元数据都通过每个实例中的 URL 访问其 VM 内 API(请参阅下面的进一步阅读链接)。如果用户数据以 shebang 开头,则实例知道将用户数据作为脚本执行。如果用户数据不以 shebang 开头,则实例不会自动执行任何操作。实例上的任何初始化脚本都可以通过上面提到的 URL 访问用户数据,并在执行脚本时使用它找到的任何键/值对。

它在 Vagrant 中的工作原理:

AWS 用户数据的概念并不存在。相反,可以使用 Vagrant 中的配置程序来模仿该行为。复制此行为的最简单方法是使用 shell 配置程序(或者,如果您熟悉这些配置程序,可以使用 chef/puppet),就像我上面提到的那样。Vagrant 和 AWS 之间的主要区别在于用户数据所在的位置:在 AWS 中,用户数据实际上并不存在于实例上(仅限 API),而使用 Vagrant 时,您必须将用户数据存储在 VM 文件系统的某个位置。读取用户数据的脚本需要理解这一区别。

进一步阅读的链接:

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AESDG-chapter-instancedata.html http://docs.vagrantup.com/v2/provisioning/index.html

答案2

只需更正一下,vagrant AWS 插件有一个发送用户数据的选项:

用户数据

您可以为正在启动的实例指定用户数据。

Vagrant.configure("2") do |config| # ... 其他内容

config.vm.provider “aws” 执行 |aws|

# Option 1: a single string
aws.user_data = "#!/bin/bash\necho 'got user data' > /tmp/user_data.log\necho"

# Option 2: use a file
aws.user_data = File.read("user_data.txt")   end end 

相关内容