![将 EC2 样式的用户数据传递给 virtualbox/vagrant VM](https://linux22.com/image/1389641/%E5%B0%86%20EC2%20%E6%A0%B7%E5%BC%8F%E7%9A%84%E7%94%A8%E6%88%B7%E6%95%B0%E6%8D%AE%E4%BC%A0%E9%80%92%E7%BB%99%20virtualbox%2Fvagrant%20VM.png)
我正在尝试使用 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