使用Vagrant和AWS用户数据部署新VM无法正常工作

时间:2013-07-09 18:35:57

标签: amazon-web-services vagrant puppet

我有一个使用vagrant和puppet的配置设置,在本地运行良好,我现在尝试使用vagrant-aws将其移动到AWS。

根据我的理解,我可以使用vagrant中指定的AWS用户数据字段在新vm的第一次启动时运行命令,如下所示:

aws.user_data = File.read("user_data.txt")

user_data.txt包含:

#!/bin/bash
sudo apt-get install -y puppet-common

然后我的现有puppet供应脚本应该能够运行。但是这会在vagrant up命令中出现错误:

[aws] Running provisioner: puppet...
The `puppet` binary appears to not be in the PATH of the guest. This
could be because the PATH is not properly setup or perhaps Puppet is not
installed on this guest. Puppet provisioning can not continue without
Puppet properly installed.

但是当我进入机器时,我看到用户数据确实被解析并且木偶安装成功。在用户数据安装木偶之前,木偶供应商是否正在运行?或者有没有更好的方法在尝试配置之前在vm上安装puppet?

2 个答案:

答案 0 :(得分:2)

它已经坏了,但如果您使用的是Ubuntu,那么可以解决这个问题,这比构建自己的AMI简单得多。

将以下行添加到您的配置中:

aws.user_data = "#cloud-config\nbootcmd:\n - echo 'manual' > /etc/init/ssh.override\npackages:\n - puppet\nruncmd:\n - [ 'rm', '/etc/init/ssh.override' ]\n - [ 'service', 'ssh', 'start' ]\n"

这告诉Cloudinit在启动过程的早期禁用SSH启动,并在安装软件包后重新启用它。现在Vagrant只有在完全安装软件包后才能通过SSH来运行puppet。

这可能适用于除了Ubuntu之外使用Cloudinit的其他发行版,虽然它是Upstart特定的,因此命令可能需要调整。

答案 1 :(得分:0)

嗯,我通过建立我自己的AMI与木偶和我需要安装的其他东西来解决这个问题,看起来好像流浪汉被打破了或者我在这里误解了别的东西。