0

我有一个带有 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.

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

4

2 回答 2

2

它已损坏,但如果您使用的是比构建自己的 AMI 简单得多的 Ubuntu,则有一种解决方法。

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

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 的,因此可能需要调整命令。

于 2013-07-22T23:02:51.560 回答
0

好吧,我通过使用 puppet 和其他我需要安装的东西构建自己的 AMI 来解决这个问题,但似乎 vagrant-aws 已经坏了,或者我在这里误解了其他东西。

于 2013-07-12T16:42:24.073 回答